Django Model
μ₯κ³ λ ORMκΈ°λ²μ λ°λΌ ν μ΄λΈμ νλμ ν΄λμ€λ‘ μ μνκ³ , ν μ΄λΈμ 컬λΌμ ν΄λμ€μ λ³μλ‘ λ§€ννλ€.
λ°μ΄ν°λ² μ΄μ€ μ€μ
# settings.py
# Database
# https://docs.djangoproject.com/en/2.1/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'mydatabaseuser',
'PASSWORD': 'mypassword',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}κΈ°λ³Έμ μΌλ‘ sqlite3λ₯Ό μ¬μ©νκ³ μλ€. λ§μ½μ λ€λ₯Έ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ¬μ©νκ³ μΆλ€λ©΄ ENGINEμ λ·λΆλΆμ μμ νλ©΄λλ€.
ENGINE
django.db.backends.mysqldjango.db.backends.oracledjango.db.backends.postgresqldjango.db.backends.sqlite3
NAME
μ¬κΈ°μ nameμ νλ‘μ νΈ μ μ₯λ νμΌ λͺ μ΄λ€.
μ¬μ©μ μ€μ
SQLite λ₯Ό λ°μ΄ν°λ² μ΄μ€λ‘ μ¬μ©νμ§ μλ κ²½μ° USER, PASSWORD, HOSTλ₯Ό μΆκ° μ€μ νμ¬ μ¬μ©ν μ μλ€.
λͺ¨λΈ λ§λ€κΈ°
κ° λͺ¨λΈμ Django.db.models.Model ν΄λμ€μ μλΈν΄λμ€λ‘ ννλλ€. κ°κ°μ λͺ¨λΈμ μ¬λ¬κ°μ ν΄λμ€ λ³μ(λͺ¨λΈμ λ°μ΄ν°λ² μ΄μ€ νλ)λ₯Ό κ°μ§κ³ μλ€.
modelsλ μμ±ν λͺ¨λΈμ΄ μ₯κ³ λͺ¨λΈμμ μλ―Ένλ€. μ₯κ³ λ μμ±λ modelμ΄ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λμ΄μΌνλ€κ³ μκ²λλ€.
μλμμ κ°λ¨ν μμλ₯Ό μ΄ν΄λ³΄μ.
μ€λ¬Έμ‘°μ¬ μ ν리μΌμ΄μ μ Questionκ³Ό Choice λκ°μ λͺ¨λΈμ μμ±ν΄λ³΄μ. μ΄λ λκ°μ λͺ¨λΈμ μ°κ΄λμ΄ μλ€.
μμ±(Field)
λͺ¨λΈμ μ¬λ¬κ°μ μμ±μ κ°μ§κ³ μλ€. μμ±μ μ μνκΈ° μν΄μλ κ° νλλ§λ€ μ΄λ€ μ’ λ₯μ λ°μ΄ν° νμ (ν μ€νΈ, μ«μ, λ μ§, λ€λ₯Έ κ°μ²΄ μ°Έμ‘° λ±)μ κ°μ§λμ§λ₯Ό μ ν΄μΌνλ€.
κ° μμ±μ Field ν΄λμ€μ μΈμ€ν΄μ€λ‘ ννλλ€.
Field
μ€λͺ
AutoField(**options)
idλ‘ μ¬μ© κ°λ₯ν μλμΌλ‘ μ¦κ°νλ IntegerFieldμ΄λ€. λͺ¨λΈμ κΈ°λ³Έν€ νλλ₯Ό λ³λλ‘ μ§μ νμ§ μμΌλ©΄ μλμΌλ‘ μΆκ°λλ€.
BooleanField(**options)
true / false νλμ΄λ€. nullκ° νμ©μ΄ νμνλ€λ©΄ NullBooleanField λ₯Ό μ¬μ©νλ©΄λλ€. Default μ΅μ μ μ μνμ§ μμΌλ©΄ κΈ°λ³Έκ°μ Noneμ΄λ€.
CharField(max_length=None,**options)
κΈμμκ° μ νλ ν
μ€νΈλ₯Ό μ μ
μ λͺ©κ³Ό κ°μ΄ μ§§μ λ¬Έμμ΄ μ 보λ₯Ό μ μ₯ν λ μ¬μ©νλ€.
max_length νλμ μ΅λκΈΈμ΄λ νμ μ΅μ
μ΄λ€.
DecimalField(max_digit=None, decimal_palces=None, **options)
κ³ μ μμλ‘ Pythonμ Decimal μΈμ€ν΄μ€λ‘ λνλλ€.
max_digits μ«μμ νμ©λλ μ΅λ μλ¦Ώμμ΄λ€.
decimal_palces μ«μμ ν¨κ» μ μ₯λ μμ μλ¦Ώμμ΄λ€.
DecimalField(β¦, max_digits=5, decimal_palces=2) λ μ΅λ 999 μμμ 2μ리 μ΄νμ΄λ€.
IntegerField(**options)
μ μ κ°
TextField(**options)
κΈμ μμ μ νμ΄ μλ κΈ΄ ν μ€νΈλ₯Ό νννλ€.
DateTimeField(auto_now=False, auto_now_add=False,**options)
λ μ§μ μκ°μ μ μνλ€.
auto_now λ κ°μ²΄κ° μ μ₯λ λλ§λ€ λ§€λ² μλμΌλ‘ νμ¬μκ°μ΄ μ€μ λλ€.( μ΅κ·Ό μμ λ± timestampλ‘μ¨ μ μ©νλ€.) Model.saveκ° νΈμΆλ λ μλμΌλ‘ μμ λλ€.
auto_now_add κ°μ²΄κ° μ²μ μμ±λ λ μλμΌλ‘ νμ¬μκ°μ΄ μ€μ λλ€. (μμ±μ timestampλ‘ μ μ©) λ§μ½ μμ μ μνλ€λ©΄ default=today or default=tiemzone.now λ₯Ό μ¬μ©νλ©΄λλ€.
μ΄ 3κ°μ μ΅μ
μ κ°μ΄ μΈ μ μμΌλ©°, λ§μ½ auto μ΅μ
μ Trueλ‘ μ€μ νλ©΄ editable=False, blank=True λ‘ μ€μ λλ€.
ForeignKey(**options)
λ€λ₯Έ λͺ¨λΈ μ°Έμ‘°ν€μ΄λ€.
models.ForeignKey(Question, on_delete=models.CASCADE) μμλ κ°κ°μ Choiceκ° νλμ Questionμ κ΄κ³λλ€λ κ²μ μλ €μ€λ€.
FilePathField(path=None, match=None, recursive=False, max_length=100, **options)
νμΌ μμ€ν
μμ νΉμ ν λλ ν°λ¦¬μ νμΌμ΄λ¦μΌλ‘ μ νλλ€.
path λ νμ μΈμλ‘ μ λ νμΌ μμ€ν
κ²½λ‘μ΄λ€.(/home/images)
match : μ νμ μΈμλ‘ νμΌ μ΄λ¦μ νν°λ§ν λ μ¬μ©ν λ¬Έμμ΄λ‘ λ μ κ·ννμμ΄λ€. κΈ°λ³ΈνμΌ μ΄λ¦μ μ μ©λλ€. (foo.*\.txt$)
recursive : μ νμ μΈμλ‘ pathμ λͺ¨λ μλΈ λλ ν°λ¦¬κ° ν¬ν¨λμΌνλμ§ μ¬λΆλ₯Ό μ§μ (true/false)
allow_files or allow_folders : μ νμ μΈμλ‘ μ§μ λ μμΉμ νμΌ or ν΄λλ₯Ό ν¬ν¨ν μ§ μ¬λΆλ₯Ό μ§μ νλ€(true/false). λ μ€ νκ°λ λ°λμ Trueμ¬μΌνλ€.
λͺ¨λΈ κ΄κ³
One-to-One
ν ν μ΄λΈμ νλμ λ μ½λκ° λ€λ₯Έ ν μ΄λΈμ λ¨ νλμ λ μ½λλ§μ μ°Έμ‘°ν λ, μ΄ λ λͺ¨λΈκ°μ κ΄κ³λ₯Ό μΌλμΌ κ΄κ³λΌκ³ νλ€.
μμ κ°μ΄ κ°μΈ κ³ κ° νλͺ λΉ μ¬κΆμ νκ° μμ μ μλ€.
OneToOneField
OneToOneFieldλ ForeignKey νλμ unique=Ture μ΅μ
μ μ€ κ²κ³Ό λμΌνκ² λμνλ€. μ¦, ForeignKye κ°μ΄ λ°λμ κ³ μ ν κ°μ΄μ΄μΌνλ€.
μμλ₯Ό μ΄ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
μΌλμΌ κ΄κ³μμ ν λͺ¨λΈμ΄ λ€λ₯Έ λͺ¨λΈμ μ°Έμ‘°νλ λ°©λ²μ΄λ€.
Many-to-One
ν ν μ΄λΈμ μλ λ κ° μ΄μμ λ μ½λκ° λ€λ₯Έ ν μ΄λΈμ μλ νλμ λ μ½λλ₯Ό μ°Έμ‘°νλ κ²½μ°μ΄λ€.

λ€μκ³Ό κ°μ΄ ForeignKeyλ₯Ό μ΄μ©ν΄μ λ€λμΌ κ΄κ³λ₯Ό μ€μ ν μ μλ€. ν κ³ κ°μ΄ μ£Όλ¬Έμ μ¬λ¬κ° ν μ μλ κ²½μ°μ λν΄μ μ΄ν΄λ³΄μ
μ¬κΈ°μ ForeignKeyμ νλλͺ μ μμ λ‘κ² ν μ μμ§λ§ μ°κ²°λμ λͺ¨λΈμ μλ¬Έμλ‘ μ νλ κ²μ κΆμ₯νλ€.
on_delete
μ΅μ
μ€λͺ
CASCADE
λ μ½λκ° μμ λλ©΄, κ·Έ λ μ½λλ₯Ό μΈλν€λ‘ μ°Έμ‘°νκ³ μλ λͺ¨λ λ μ½λλ₯Ό ν¨κ» μμ νλ€.(default)
PROTECT
μΈλν€κ° μ°Έμ‘°νκ³ μλ λ μ½λλ₯Ό μμ νμ§ λͺ»νκ² λ§λ λ€. μμ λ₯Ό μλνλ κ²½μ° ProtectedErrorκ° λ°μνλ€.
SET_NULL
μΈλν€κ° μ°Έμ‘°νκ³ μλ λ μ½λκ° μμ λλ©΄, μΈλν€ νλ κ°μ΄ null κ°μ΄ λλ€. μ΄λ μΈλν€ νλμ null=True μ΅μ
μ΄ μμ λλ§ κ°λ₯νλ€.
SET_DEFAULT
μΈλν€κ° μ°Έμ‘°νκ³ μλ λ μ½λκ° μμ λλ©΄, μΈλν€ νλμ κ°μ΄ κΈ°λ³Έκ°μΌλ‘ λ°λλ€. (default μ΅μ
μ΄ μ€μ λμ΄ μμ λλ§ κ°λ₯νλ€.)
SET()
SET() ν¨μμ κ°μ΄λ νΈμΆκ°λ₯ν κ°μ²΄λ₯Ό μ λ¬ν μ μλ€. μΈλν€κ° μ°Έμ‘°νλ λ μ½λκ° μμ λλ©΄ μ λ¬λ κ° λλ κ°μ²΄λ₯Ό νΈμΆν κ²°κ³Όλ‘ μΈλν€λ₯Ό μ±μ΄λ€.
μ¬κ·μ κ΄κ³(Recursive)
ν ν μ΄λΈμ λ μ½λλ€μ΄ κ°μ ν μ΄λΈμ λ€λ₯Έ λ μ½λλ€κ³Ό κ΄κ³λ₯Ό νμ±νλ κ²μ λ§νλ€.
μλ₯Ό λ€μλ©΄, κ°μ μ€ν°λμμ νλͺ μ΄ λ€λ₯Έ μ€ν°λμμ κ΄λ¦¬νλ κ²½μ°λ₯Ό μλ‘ λ€μμλ€.
ID
Name
Tutor_ID
1
Joe Satriani
1
2
John Petrucci
1
3
Steve Vai
1
λ€μκ³Ό κ°μ΄ 'self' λ₯Ό μ λ¬νμ¬ μ€μ ν μ μλ€.
μ μλμ§ μμ ν
μ΄λΈκ³Όμ κ΄κ³
λͺ¨λΈμ μμ±ν λ μμ§ μ μλμ§ μμ ν
μ΄λΈκ³Όμ κ΄κ³λ₯Ό μ€μ ν΄μΌνλ κ²½μ°μλ 'λͺ¨λΈλͺ
' μ μ λ¬νλ©΄λλ€.
Many-to-Many
νλμ ν μ΄λΈμ νλ μ΄μμ λ μ½λκ° λ€λ₯Έ ν μ΄λΈμ νλ μ΄μμ λ μ½λλ₯Ό μ°Έμ‘°νλ κ²½μ°μ΄λ€. λ€λλ€ κ΄κ³λ₯Ό ννν λ, λ ν μ΄λΈ μ¬μ΄μ κ΄κ³λ₯Ό νννκΈ° μν΄ μ°Έμ‘° μ 보λ₯Ό λ΄μ μλ‘μ΄ ν μ΄λΈ(μ€κ°λͺ¨λΈ)μ μμ±νκ² λλ€.

ManyToManyFieldλ₯Όμ΄μ©ν΄μ μ€μ ν μ μλ€.
ManyToManyField
λ€λλ€ κ΄κ³μ νλλͺ μ 볡μνμΌλ‘ μ€μ νλ κ²μ κΆμ₯νλ€.
μλ‘ κ΄κ³λ λͺ¨λΈλ€ μ€ μ΄λ κ³³μ ModelToManyFieldλ₯Ό μ μΈνλ μκ΄ μμ§λ§ ν λͺ¨λΈμλ§ μ μΈν΄μΌνλ©°, μλ―Έκ° μμ°μ€λ‘μ΄ κ³³μ μ μΈν΄μ£Όλ κ²μ κΆμ₯νλ€.
μ€κ°λͺ¨λΈ(Intermediary Model)
λ ν
μ΄λΈμ λ€λλ€ κ΄κ³λ₯Ό λνλ΄μ£Όλ λͺ¨λΈμ΄λ€. λ λͺ¨λΈμ μΈλν€λ₯Ό νλλ‘ κ°μ§κ³ μλ€. ManyToManyField λ‘ κ΄κ³μ€μ νλ©΄ μλμΌλ‘ μμ±λμ§λ§ μ§μ μμ±ν μλ μλ€.
- though
- through_field
μ€κ° λͺ¨λΈμ μ§μ μμ±νλ κ²½μ°μ λ ν μ΄λΈμ μ°Έμ‘°νλ μΈλν€ νλλ₯Ό λͺ νν μ μΈν΄μΌνλ€.
μμ€λͺ¨λΈ(Source Model) :
ManyToManyFieldκ° μλ λͺ¨λΈμ λ§νλ€.νκ²λͺ¨λΈ(Target Model) :
ManyToManyFieldμ μΈμλ‘ μ λ¬λλ λͺ¨λΈμ λ§νλ€.
λ§μ½ μ€κ° λͺ¨λΈμμ νλ μ΄μμ μΈλν€ νλκ° μμ€ λͺ¨λΈ νΉμ νκ² λͺ¨λΈμ μ°Έμ‘°νλ€λ©΄, through_field μ΅μ
μ ν΅ν΄ μΈλν€ μ€μ μ ν΄μ€μΌνλ€.
μμ°Έμ‘°
μΈλν€ νλλ₯Ό κ°μ§ μμ€λͺ¨λΈμ μ°κ²°λ νκ²λͺ¨λΈμ μΈμ€ν΄μ€λ€μ μμ κ³Ό μ°κ²°λ μμ€λͺ¨λΈμ μΈμ€ν΄μ€λ₯Ό κ°μ Έμ¬ μ μλ Manager λ₯Ό κ°μ§κ²λλ€. Managerλ μμ€λͺ¨λΈλͺ
_set μ ννλ‘ μμ±λλ€. Reverse accessorλ κ΄κ³λ₯Ό μμ°Έμ‘°ν μ μλ μ΄ Mangerλ₯Ό μλ―Ένλ€.
- related_name
μλμΌλ‘ μμ±λλ μμ°Έμ‘° Mangerμ΄λ¦μ related_name μ΅μ
μΌλ‘ λ°κΏμ€ μ μλ€.
λͺ¨λΈ νμ±ν
makemigrations
makemigartions λͺ
λ Ήμ΄λ₯Ό μ€νν΄ λͺ¨λΈμ μμ±, λ³κ²½λ μ¬νμ migration μΌλ‘ μ μ₯νλ λͺ
λ Ήμ΄μ΄λ€.
Migration
λͺ¨λΈμ λ³κ²½μ¬νμ μ μ₯νλ λ°©λ²μΌλ‘, λμ€ν¬μμ νμΌλ‘ μ‘΄μ¬νλ€.
μμ±λ migrationλ€μ μ€νμμΌμ£Όκ³ , μλμΌλ‘ λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§λ₯Ό κ΄λ¦¬ν΄μ£Όλ migrate λͺ
λ Ήμ΄κ° μλ€.
sqlmigrate
migrationμ μ΄λ¦μ μΈμλ‘ λ°μμ μ€ννλ SQLλ¬Έμ λ³Ό μ μλ€. νμ§λ§ μ€μ λ‘ migrationμ μ€ννμ§λ μλλ€. λ¨μν κ²°κ³Όλ§ μΆλ ₯ν λΏμ΄λ€.
migrate
μμ§ μ μ©λμ§ μμ λͺ¨λ migrationμ μμ§ν΄ μ€ννλ€. django_migrations ν
μ΄λΈμ λ§μ΄κ·Έλ μ΄μ
μ μ© μ¬λΆλ₯Ό κΈ°λ‘νλ€.
Python Shellλ‘ λͺ¨λΈ λ€λ€λ³΄κΈ°
shell μ€ννκΈ°
manage.py λ₯Ό ν΅ν΄μ shellμ μ€ννκ² λλ©΄ Djangoμμ λμνλ λͺ¨λ λͺ λ Ήμ κ·Έλλ‘ μ¬μ©ν μ μλ€.
Imort Model
κ°μ²΄ μ‘°ννκΈ°
__str__
λ€μκ³Ό κ°μ΄ κ°μ²΄μ λν μ€λͺ
μ __str__() λ₯Ό μΆκ°νμ¬ λ°κΏ μ μλ€.
κ°μ²΄ μμ±νκΈ°
νν°λ§νκΈ°
λ°μ΄ν°λ₯Ό νν°λ§ νλ κ²μ μ€μν λΆλΆμ΄λ€. νν°λ§μ ν΅ν΄μ μνλ λ°μ΄ν°λ§ κ°μ Έμ¬ μ μλ€.
νν°λ§μ κ΄λ ¨ν΄μλ 곡μ λ νΌλ°μ€λ₯Ό μ°Έμ‘°νλ©΄λλ€.
λ€λ₯Έ λͺ¨λΈκ³Ό μ°κ²°νκΈ°
order_by : μ λ ¬νκΈ°
λͺ¨λΈμ μμ±μ λ°λΌ μ λ ¬νκΈ° μν΄μ μ¬μ©ν μ μλ€.
μμ±λͺ
μ -κ° λΆμΌλ©΄ λ΄λ¦Όμ°¨μμ΄λ€.
μ°Έμ‘°
Model Field https://brunch.co.kr/@ddangdol/4
μ₯κ³ λͺ¨λΈ κ΄κ³ https://nachwon.github.io/django-relationship/
Last updated