Meta options
테이블 전체에 대한 옵션. 정렬 또는 테이블 이름 등을 지정할 수 있다.
Inheritance
장고는 세가지 방법의 상속을 제공함
-
부모 클래스를 사용하여 하위 모델의 필드를 일일이 입력하지 않게 함 –> Abstract base classes
-
기존 모델을 subclass로 만들고 각 모델이 자체 DB를 가지려면 –> Multi table
-
DB는 안건드리고 파이썬 레벨 동작만 수정하는 경우 –> Proxy
Abstract base classes
Reverse accessor과 Reverse query name
class RelatedUser(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class PostBase(models.Model):
author = models.ForeignKey(
RelatedUser,
on_delete=models.CASCADE,
related_name='posts',
)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
class PhotoPost(PostBase):
photo_url = models.CharField(max_length=500)
class TextPost(PostBase):
text = models.TextField()
위 모델을 적고 makemigrations를 하면 다음과 같은 에러가 뜬다.
필드에러 304번(Reverse accessor), 305번(Reverse query name).
Reverse accessor는 manager를 말함. 역으로 DB에 참조할 수 있도록 도와주는 매니저. related_name = ‘posts’로 설정한 그것.
PostBase에서 author로 가는 것은 정방향이라면 RelatedUser에서 자기 자신을 참조하는 것은 역방향.
proxy
데이터베이스 테이블이 만들어지지 않는다 프록시는 편의성 때문에 쓰지만 실수하지 않기 위해서도 쓴다(?)
Comments