κΈ°λ³Έμ μΌλ‘ Django 곡μλ¬Έμ μ½λμ€νμΌμ κ·μΉμ λ°λ¦ λλ€.
λͺ¨λΈμ μ΄λ¦μ νλ‘μ νΈ λ΄μμ μ μΌνλ©΄ μ’μ΅λλ€. νμ§λ§ μλ―Έλ₯Ό λͺ ννκ² νλ κ²μ΄ λ μ’κ³ μ΄μ λ°λ₯Έ μ€λ³΅μ νμ©ν©λλ€.
λ€μκ³Ό κ°μ μ€λ³΅μ νμ©ν©λλ€.
apps.transactions.models.Transaction
apps.accounting.models.Transaction
μ€λ³΅μΌλ‘ λ°μν μ μλ μμ λ¬Έμ λ€μ ν΄κ²°νκΈ° μν΄ λ€μκ³Όκ°μ Aliasλ₯Ό μ κ·Ή νμ©ν©λλ€.
from apps.accounting.models import Transaction as AccountingTransaction
λͺ¨λΈ ν΄λμ€ λ΄λΆμ ν΄λμ€, νλ, λ©μλλ€μ μ μνλ μμλ λ€μκ³Ό κ°μ΅λλ€.
- Fields
- Custom Manager Attributes
class Meta
def __str__()
def save()
def get_absolute_url()
- Any Custom Methods
λͺ¨λΈμ μ μν λ μΈμλ§λ€ μ€λ°κΏνμ¬ μμ±ν©λλ€.
# Good
user = models.Foreignkey(
User,
verbose_name='μ¬μ©μ',
on_delete=models.CASCADE,
)
# Bad
user = models.Foreignkey(User,
verbose_name='μ¬μ©μ',
on_delete=models.CASCADE)
# Bad
user = models.Foreignkey(User, verbose_name='μ¬μ©μ', on_delete=models.CASCADE)
μΈλν€ νλλͺ μ λͺ¨λΈλͺ μ λ°λ¦ λλ€. verbose_name λν λμΌνκ² μ μ§ν©λλ€.
user = models.Foreignkey(
User,
verbose_name='μ¬μ©μ',
on_delete=models.CASCADE,
)
OneToOneField, ManyToManyField λ λμΌν κ·μΉμ μ μ©ν©λλ€. λ¨, 볡μνμ΄ μ μ ν κ²½μ° λ³΅μνμ νμ©ν©λλ€.
- DecimalFieldλ₯Ό κΈ°λ³Έμ μΌλ‘ μ¬μ©ν©λλ€.
- decimal_placesλ₯Ό 4λ‘ μ§μ ν©λλ€.
- max_digitsλ μ΅μ 4μ΄μμΌλ‘ μ§μ ν©λλ€.
- μμ«μ ννλ‘ μ μ₯ν©λλ€. (8.88% (X), 0.0888 (O)
- APIμ κ²½μ°μ DecimalFieldλ₯Ό μ¬μ©ν©λλ€.
- DecimalFieldλ₯Ό κΈ°λ³Έμ μΌλ‘ μ¬μ©ν©λλ€.
- decimal_placesλ₯Ό 0μΌλ‘ μ§μ ν©λλ€.
- max_digitsλ νλμ μμ±μ λ§μΆμ΄ μ§μ ν©λλ€.
- APIμ κ²½μ°μ IntegerFieldλ₯Ό μ¬μ©ν©λλ€.
- IntegerField, BigIntegerField, PositiveIntegerField, PositiveSmallIntegerField μ€μ νλλ₯Ό μ¬μ©ν©λλ€.
- μμκ° κΈ°λ‘λμ΄μΌ νμ§ μλ κ²½μ°λ Positive νλλ₯Ό μ¬μ©ν©λλ€.
Verbose Nameμ μ΅λν μ μΌν μ΄λ¦μ κ°λλ‘ νμ¬ Admin νλ©΄μμ λͺ¨λΈμ ν¨κ³Όμ μΌλ‘ λΆλ₯ν μ μλλ‘ ν©λλ€.
λ€μκ³Ό κ°μ νμμ λ°λ₯΄λ©΄μ μ΅λν μ§§κ² str μ μ μ§ν μ μλλ‘ ν©λλ€.
[{λͺ¨λΈ_νκΈ_μ΄λ¦} {pk}] {A}, {B}, {C}: {D}
- {λͺ¨λΈ_νκΈ_μ΄λ¦} λΆλΆμ meta.verbose_name μ μΌμΉμν΅λλ€.
- pk μλ Primary Key λ₯Ό μ΄λ€. λλΆλΆμ κ²½μ° id κ°μ΄ λλ€. pk κ°μ΄ ν¬ν¨λμ΄ μμ΄μΌ DBμμ μ½κ² μ‘°νν μ μμ΅λλ€.
- A, B, C λΆλΆμλ νμν μ 보λ₯Ό μΆκ°μ μΌλ‘ μ μ΄ μ€λλ€. κ·Έ κ°μ μλ―Έκ° λͺ νν κ²½μ°μλ key λ₯Ό ν¬ν¨νμ§ μμ΅λλ€. νμ§λ§ κ·Έ μλ―Έκ° λͺ ννμ§ μμ κ²½μ°(λλΆλΆ μ«μ)λ key: value μ€νμΌλ‘ μ μ΅λλ€.
[μ¬μ©μ 234] [email protected]
[μν 234] DancingQueen, μμμ¬λΆ: True
- λͺ¨λΈ μΈμ€ν΄μ€μ μ λ³΄κ° λ³κ²½λμ΄ λ°μ΄ν°λ² μ΄μ€μ λ°μλμ΄μΌ νλ κΈ°λ₯μ΄ μμ λ μ΄ κΈ°λ₯μ save() ν¨μλ₯Ό ν¬ν¨νλλ‘ νλ€.
# Do
def publish(self):
self.published_at = timezone.now()
self.save()
def somewhere(post):
post.publish()
# Don't
def publish(self):
self.published_at = timezone.now()
def somewhere(post):
post.publish()
post.save()
λͺ¨λΈκ³Ό κ΄λ ¨λ λΉμ¦λμ€ λ‘μ§μ 맀λμ λ©μλλ‘ μ μν©λλ€.
컀μ€ν 맀λμ λ₯Ό μ μνλ κ²½μ° λ€μκ³Ό κ°μ κ·μΉμ λ°λ¦ λλ€.
objects
λ νμ μ‘΄μ¬νμ¬μΌ νλ€.objects
λ μ₯κ³ μ κΈ°λ³Έ Managerμ μ κ·Όνλ conventionμ΄κΈ° λλ¬Έμ μ΄κ²μ μ§ν€λλ‘ ν©λλ€.objects
λ‘ μ§μ λ custom model managerλ get_querysetμ΄ νν°λ§λμ§ μμμΌ ν©λλ€. μ¦,Model.objects.all() == Model._default_manager.all()
μ΄ λμ΄μΌ ν©λλ€.- νΉμ νν°λ§μ΄ νμν κ²½μ°, μλ―Έλ₯Ό μ λ¬ν μ μλ λͺ
μΉμ μΆκ°ν©λλ€. ex)
Transaction.valid.all()
- κ°λ₯νλ©΄ 볡μνμ μ°λλ‘ ν©λλ€.
λ°μ΄ν°λ² μ΄μ€μ κ΄λ ¨λ νμμ κ²½μ° QuerySet λ©μλλ‘ μΆκ°ν©λλ€.
λ€μ λ¬Έμμ λμ΄λ λ©μλλ€κ³Ό μ μ¬ν ν¨μλ QuerySet λ©μλλΌκ³ λ³Ό μ μμ΅λλ€.
def opened(self):
return self.filter(is_opened=True)
def get_total_amount(self):
return self.aggregate(sum=Sum('amount'))['sum']
κΈ°λ³Έμ μΌλ‘ Signalμ μ¬μ©μ μ§μν©λλ€. μ¬λ¬ λͺ¨λΈμ κ±Έμ³ λ³΅μ‘ν μ²λ¦¬κ° νμν κ²μ΄ μλλΌλ©΄ κ°κΈμ init(), save(), delete() μμ μ²λ¦¬νλλ‘ ν©λλ€.
- μ¬λ¬ λͺ¨λΈμ λ³κ²½ν λ
- μ¬λ¬ κ°μ μ±μμ λ°μν ν μ’ λ₯μ μκ·Έλμ 곡ν΅μΌλ‘ μ²λ¦¬ν λ
- λͺ¨λΈμ΄ μ μ₯λ μ΄νμ μΊμλ₯Ό μ§μ°κ³ μΆμ λ
- μ½λ°±μ΄ νμνλ° μκ·Έλμ μ μΈνκ³ λ λ°©λ²μ΄ μλ κ²½μ°
- μΈλΆ ν¨ν€μ§ λͺ¨λΈμ save(), init() μ λν νΈλ¦¬κ±°λ₯Ό ꡬμ±νκ³ μΆμ κ²½μ°
- νλμ λͺ¨λΈμ μ°κ΄λμ΄ μμΌλ©° save(), delete() λ±μμ μ²λ¦¬ κ°λ₯ν κ²½μ°
- 컀μ€ν λͺ¨λΈ 맀λμ λ©μλλ₯Ό μ΄μ©ν μ μμ λ
- νΉμ λ·°μλ§ ν΄λΉνλ κ²½μ°
μ₯κ³ λͺ¨λΈ νλμ choices λ enumeration-types λ₯Ό μ¬μ©ν©λλ€.
- choices λ λͺ¨λΈ λ΄λΆμ μμ±νλ κ²μ κΈ°λ³ΈμΌλ‘ ν©λλ€.
- λ§μ½ μ¬λ¬ λͺ¨λΈμ κ±Έμ³ μ€λ³΅λλ choices κ° νμν κ²½μ°μλ κ° λͺ¨λΈλ§λ€ μ μν©λλ€.
- λ³μλͺ λ° μμ±μ λͺ¨λ μμ΄ λλ¬Έμμ _(μΈλμ€μ½μ΄) λ₯Ό μ‘°ν©νμ¬λ‘ μμ±ν©λλ€.
- λ°μ΄ν°λ² μ΄μ€μ μ μ₯λλ κ°μ μ«μ, λλ¬Έμ, _(μΈλμ€μ½μ΄) λ₯Ό μ‘°ν©νμ¬ μμ±ν©λλ€.
- chocies μ ν΄λμ€λͺ μ λ¨μλ₯Ό μ¬μ©ν©λλ€. λμ Choices λ₯Ό λΆμ΄μ§ μμ΅λλ€.
from django.db import models
class Model(models.Model):
class State(models.IntegerChoices):
PREPARE = 1, 'μ€λΉ'
PROCESS = 2, 'μ§ν'
COMPLETE = 3, 'μλ£'
state = models.PositiveSmallIntegerField(
'μν',
choices=State.choices,
default=State.PREPARE.value,
)
View ν¨μμμ λ°ννλ HTTPResponse νμ κ°μ²΄λ₯Ό μμ±ν λ, HTTP μν μ½λκ° 200μ΄λΌλ©΄ status 맀κ°λ³μλ μ λ ₯νμ§ μμ΅λλ€.
from django.http.response import HttpResponse
HttpResponse()
HttpResponse(status=204)
from django.http.response import HttpResponse
HttpResponse(status=200)