models.py
안에 model을 만들기 위해 write a class:
class Flower(models.Model):
## Define attributes here
pass
Model
parent class django.db.models.Model
module필드는 데이터베이스의 테이블에서 열(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)
petal_color
to be a string & want to have max length of 20 characterspetal_number
to be integers & default value of 0예를 들어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
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 theFlower
instance if its connectedGardener
instance is deleted- in words, here, we created a
Gardener
property for theFlower
class that has a field type of.ForeignKey()
with the first argument ofGardener
and a second argument ofon_delete
필드 옵션 : 모든 필드에는 여러가지 설정을 변경할 수 있는 필드 옵션을 지정해줄 수 있다.
자주 사용하는 (선택) 필드 옵션을 살펴보자.
null
: True
이면 데이터베이스에 빈 값을 null
값으로 저장한다. 기본값은 null=False
이다.
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
: True
이면 필드가 빈 값을 받을 수 있게 된다. 기본값은 blank=False
field = models.IntegerField(blank=True)
EX)
class Flower(model.Model):
nickname = models.CharField(max_length=20, blank=True)
# Other fields
🔴 이제 Flower instance를 만들때, nickname을 빈 값으로 나둘 수 있다.
choices
: 길이가 2인 튜플들의 리스트 혹은 튜플을 선택지 변수로 지정할 수 있다. choices
옵션에 선택지 변수를 지정해주면 된다. this limits the input a field can accept.choices
by creating a list of tuples that contain 2 items: a key and a valueBy 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의 class 안에 또 class Meta를 넣어준다.
class Meta