ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] app 생성하고 model 설정하기, 옵션 추가하기
    파이썬/Django 2022. 12. 29. 09:10
    728x90
    반응형

    사용자 유저 프로필 기능 추가하기

    📁 users/models.py

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    # Create your models here.
    class User(AbstractUser):
        # gender 컬럼에 옵션으로 넣어 줄 클래스
        class GenderChoices(models.TextChoices):
            # 첫번째 값은 데이터베이스에 들어갈 value, 두번째 값은 관리자 페이지에 들어갈 label
            MALE = ("male", "Male") 
            FEMALE = ("female", "Female")
            
        class LanguageChoices(models.TextChoices):
            KR = ("kr", "Korea")
            EN = ("en", "English")
            
        class CurrencyChoices(models.TextChoices):
            WON = "won", "Korean Won"
            USD = "usd", "Dollar"
        # 성과 이름으로 분류하는 것은 서구적인 정보 입력 방식이기 때문에 관리자 페이지에서 보이지 않도록 설정한다. editable=False
        first_name = models.CharField(max_length=150, editable=False)
        last_name = models.CharField(max_length=150, editable=False)
        
        # 사용자 프로필사진 -> ImageField()를 쓰려면 Pillow 가 설치되어 있어야 함
        # blank=True: 필드가 필수사항이 아니게 설정
        avatar = models.ImageField(blank=True)
        # 이름 입력창
        name = models.CharField(max_length=150, default="")
        # 유저가 호스트일 경우
        is_host = models.BooleanField(null=True)
        
        gender = models.CharField(max_length=10, choices=GenderChoices.choices,)
        language = models.CharField(max_length=2, choices=LanguageChoices.choices,)
        currency = models.CharField(max_length=5, choices=CurrencyChoices.choices,)

    컬럼에 옵션 추가하기

    gender = models.CharField(max_length=10, choices=GenderChoices.choices,)

    사용자 성별을 고를때 남/여를 보기로 주려면 choices 옵션에 옵션클래스를 만들어서 설정해준다.

    옵션클래스는 아래와 같이 생성하되 같은 User클래스 내부에 생성해야 한다.

    class GenderChoices(models.TextChoices):
            # 첫번째 값은 데이터베이스에 들어갈 value, 두번째 값은 관리자 페이지에 들어갈 label
            MALE = ("male", "Male") 
            FEMALE = ("female", "Female")
    • 변수는 대문자로 작성
    • 첫번째 값 : 데이터베이스에 들어갈 value
    • 두번째 값 : 관리자 페이지에 들어갈 label

    숙소 model 추가하기

    숙소 정보와 어메니티 정보를 만들어준다.

     

    📁 rooms/models.py

    from django.db import models
    
    class Room(models.Model):
        """Room Model Definition"""
        
        class RoomKindChoices(models.TextChoices):
            ENTIRE_PLACE = ("entire_place", "Entire Place")
            PRIVATE_ROOM = ("private_room", "Private Room")
            SHARED_ROOM = ("shared_room", "Shared Room")
            
        country = models.CharField(max_length=50, default="한국")
        city = models.CharField(max_length=80, default="서울")
        price = models.PositiveIntegerField()
        rooms = models.PositiveIntegerField()
        toilets = models.PositiveIntegerField()
        description = models.TextField()
        address = models.CharField(max_length=250,)
        pet_friendly = models.BooleanField(default=True)
        kind = models.CharField(max_length=20, choices=RoomKindChoices,)
        owner = models.ForeignKey("users.User", on_delete=models.CASCADE)
        
    class Amenity(models.Manager):
        """ Amenity Definition """
        
        name = models.CharField(max_length=150,)
        description = models.CharField(max_length=150, null=True,)
    LIST
Designed by Tistory.