Django | Codecademy | Creating a Model

celeste·2022년 4월 9일
0

Codecademy Django

목록 보기
2/5

Creating a Model

models.py안에 model을 만들기 위해 write a class:

class Flower(models.Model):
  ## Define attributes here
  pass
  • model inherits from the Model parent class django.db.models.Model module
    • These models will later inform the database to use this schema to build its tables
    • In the example above, our database will know that incoming data records will contain attributes of our flowers, like perhaps, petal color, number of petals, average height, etc

Adding Model Fields

Fields란?

필드는 데이터베이스의 테이블에서 열(column)을 의미한다. Django 에서 필드는 모델을 생성할 때 필수적인 요소이며, 모델클래스의 속성으로 나타낸다.

class 모델이름(models.Model):
    필드이름1 = models.필드타입(필드옵션)
    필드이름2 = models.필드타입(필드옵션)

class Flower(models.Model):
  petal_color = models.CharField(max_length=20)
  petal_number = models.IntegerField(default=0)
  • we expect petal_color to be a string & want to have max length of 20 characters
  • we expect petal_number to be integers & default value of 0

Primary Key, Foreign Key, and Relationships

  • later, use models to create instances(specific model objects) in our database - ex. rose, sunflower, daisy, etc
  • instances correspond to rows, or records in database

예를 들어Gardner가 몇개의 Flower을 관리한다고 치자. 하나의 가드너는 여러개의 꽃을 관리 할 수 있지만, 하나의 꽃은 가드너가 한명이다.
Therefore, Gardner has a one to many relationship with Flowers("one Gardner for multiple Flowers") & Flowers have a Many to One relationship with a Gardner.

Gardner : Flowers
Many : 1

  • need to supply Flower with a foreign key of a Gardner (so the Flower instances know which Gardner instance takes care of it)
# Garden has a one-to-many relationship with Flower
class Gardener(models.Model):
  first_name = models.CharField(max_length=20)
  years_experience = models.IntegerField()
 
# Flower has a many-to-one relationship with Gardener
class Flower(models.Model):
  petal_color = models.CharField(max_length=10)
  petal_number = models.IntegerField()
  gardener = models.ForeignKey(Gardener, on_delete=models.CASCADE) 

🌹 Making a Foreign Key: models.ForeignKey()

  • 1st argument : where the foreign key is coming from - Gardener
  • 2nd argument : on_delete=models.CASCADE = delete the Flower instance if its connected Gardener instance is deleted
  • in words, here, we created a Gardener property for the Flower class that has a field type of .ForeignKey() with the first argument of Gardener and a second argument of on_delete

Field Type Optional Arguments

필드 옵션 : 모든 필드에는 여러가지 설정을 변경할 수 있는 필드 옵션을 지정해줄 수 있다.

자주 사용하는 (선택) 필드 옵션을 살펴보자.

null

  • null : True이면 데이터베이스에 빈 값을 null 값으로 저장한다. 기본값은 null=False 이다.
    tells the database if a field can be left intentionally void of information (null)

    field = models.IntegerField(null=True)

EX)
class Flower(model.Model):
  petal_number = models.IntegerField(max_length=20, null=True)
  # Other fields 

🔴 이제 Flower instance를 만들때, petal_number을 null로 설정할 수 있다.

blank

  • blank: True 이면 필드가 빈 값을 받을 수 있게 된다. 기본값은 blank=False
    means a field doesn’t have to take anything, not even a null value

    field = models.IntegerField(blank=True)

EX)
class Flower(model.Model):
  nickname = models.CharField(max_length=20, blank=True)
  # Other fields

🔴 이제 Flower instance를 만들때, nickname을 빈 값으로 나둘 수 있다.

choices

  • choices: 길이가 2인 튜플들의 리스트 혹은 튜플을 선택지 변수로 지정할 수 있다. choices 옵션에 선택지 변수를 지정해주면 된다. this limits the input a field can accept.
    We can set choices by creating a list of tuples that contain 2 items: a key and a value

By using choices, we know exactly what data we can accept from users.

color = models.CharField(max_length=1, choices=COLOR_CHOICES)

1️⃣ need to create the variables for our tuple’s key values!
2️⃣ create your list of tuples
3️⃣ create field type that contains choices= choices list이름

EX)
SHIRT_SIZES = (
      ('S', 'Small'),
      ('M', 'Medium'),
      ('L', 'Large'),
  )
field = models.CharField(max_length=1, choices=SHIRT_SIZES)

🔴 이제 SHIRT_SIZE는 'S', 'M', 'L' 중에서만 입력 가능하다. 

더 많은 예시)
https://nachwon.github.io/django-field/

Model Metadata

메타데이터란, "데이터를 위한 데이터" 라고도 불리고,
'데이터에 관한 구조화된 데이터', '다른 데이터를 설명해 주는 데이터'이다.

  • 대량의 정보 가운데에서 찾고 있는 정보를 효율적으로 찾아내서 이용하기 위해 일정한 규칙에 따라 콘텐츠에 대하여 부여되는 데이터이다. (ex. 인스타그램의 해시태그('#')와 유사한 역할)
  • Django 모델에 Meta클래스를 추가하는 것은 전적으로 선택 사항이며, 필드가 아닌 모든 것을 지칭한다.
  • Meta클래스는 권한, 데이터베이스 이름, 단 복수 이름, 추상화, 순서 지정 등과 같은 모델에 대한 다양한 사항을 정의하는 데 사용할 수 있습니다

Metadata 사용하기

model의 class 안에 또 class Meta를 넣어준다.

class Meta

0개의 댓글