Challenge D+5
추상 클래스 - DB 테이블 만들지 않는 기본 모델 클래스.
python manage.py startapp core
Core Model
created_at(auto_add)
updated_at(auto_add)
class Meta:
abstract=True
Core Model
DateField - auto_now_add
: 객체가 처음 생성될 때 자동으로 현재시각이 필드 값이 되도록 함.
DateField - auto_add
: 객체가 저장될 때마다 자동으로 현재 시각이 필드 값이 되도록 함.
⇒ created_at, updated_at
class Meta:
- ordering : 기본 정렬 결정
- db_table : 테이블의 이름을 결정
- verbose_name : 사용자를 위한 이름 결정
IntegerField - 정수저장
FloatField - 소수(float값 저장)
ImageField - 이미지 파일 저장 ⇒ pillow 라이브러리 필요
모델들 간의 관계
- 다대다 : ForeignKey
- ManyToMany Field 필드
- 일대일 : OneToOneField 필드
- 다대다 : ForeignKey
on_delete : ForeignKey 필드가 바라보는 객체가 삭제될 때 본 객체를 어떻게 할 것인지 결정.
on_delete=models.SET_NULL
// Foreign 필드가 바라보는 객체가 삭제될 때 본 객체에 null 값을 할당함.
null=True
on_delete=models.CASCADE
// Foreign 필드가 바라보는 객체가 삭제될 때 본 객체 또한 삭제.
ForeignKey 필드
related_name : ForeignKey 필드가 바라보는 객체에서 본 객체를 역으로 참조할 때 사용하는 이름.
category = models.ForeignKey(..., related_name="books") category = Category.objects.get(id=1) category.books.all()
⇒ ManyToManField에서 related_name 옵션과 같은 역할.
ManyToManyField - 다대다 관계에서 사용하는 ForeignKey 필드
// related_name 옵션 : 역참조
OneToOneField - 일대일 관계에서 사용하는 ForeignKey 필드
books = models.ManyToManyField("books.Book", related_name="fav_lists")
// 모델명 필요
created_by = models.OneToOneField("users.User", on_delete=models.CASCADE)
admin.register 데코레이터
: 모델 클래스들을 어드민 패널에 등록시키기 위해 Model Admin 클래스를 감쌈.
- list_display
- list_filter : 사이드 바에 보일 필드 결정