django orm deep dive 2 - Django 5 ORM Model Essentials 2024
https://www.youtube.com/watch?v=davrrlaKEOI&list=PLOLrQ9Pn6cazL1rwTY2d66M9VppexGL-_&index=24
- 46강의 중 필요한 내용만 정리한다.
1. Defining custom primary keys
- 직접 primary key를 설정 하는 방법
- 설정을 하지 않으면 자동으로 id가 생성된다. 하지만 직접 정의할 수 도 있다.
- Autofield를 사용하면 해당 필드는 자동증가가 된다.
class SeasonalEvents(models.Model)
id = models.BigAutoField(primary_key=True)
2. Using Editable
- field의 속성중에 editable이 있다.
- form에서 해당 필드를 제외시킨다. 입력 또는 편집이 불가능하다.
- 장고 관리자 폼에서 readonly_fields 옵션을 사용하면 읽기 전용으로 표시할 수 있다.
- serializer에서 해당 필드를 기본적으로 읽기 전용(read_only)으로 설정한다.
- 필요시 serializer에서 명시적으로 필드를 다시 변경 가능하다.
slug = models.SlugField(editable=False)
3. Automatically populate certain fields based on other fields
- admin에서 사용되는 prepopulated_fields는 타겟 필드의 입력에 따라 정해진 필드의 정보가 자동으로 입력되게 만들어주는 필드이다.
- 예) name 필드에 정보가 입력되면 slug 필드에 자동으로 동일 내용이 입력된다.
class CategoryAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("name",)}
- model의 save()를 이용해 slug의 자동 입력을 만들 수 있다.
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super().save(*args, **kwargs)
4. admin inline 정리
- inline을 상속받은 class에서 사용되는 변수
- extra : 보여질 폼의 수 기본적으로 3개의 빈 폼을 제공한다.
- fk_name : 모델이 ForeignKey로 연결된 부모 모델을 참조하는 데 사용되는 필드를 명시하는 데 사용된다.
class ChildCategoryInline(admin.TabularInline):
model = Category
fk_name = "parent"
extra = 1
- modeladmin을 상속받은 class에서 사용되는 변수
- list_display에 커스텀 필드를 정의할 수 있다.
class ParentCategoryAdmin(admin.ModelAdmin):
inline = [ChildCategoryInline]
list_display = (
"name",
"parent_name",
)
def parent_name(self, obj):
return obj.parent.name if object else None
5. 다중 중첩에 대한 admin 구현
- admin에서 inlinemodeladmin이 있지만, 이는 한 단계의 nested 구조만을 지원한다. 다중 구조는 지원을 하지 않는다.
- 이 경우 사용 가능한 것이 django-nested-admin이다.
- https://github.com/theatlantic/django-nested-admin
- 주요 기능 및 호환성 :
- 중첩 인라인: 복수의 모델 간 관계가 중첩 구조인 경우, 이를 한 번의 인터페이스에서 관리할 수 있도록 도와준다.
- 드래그 앤 드롭 정렬: 사용자 친화적인 인터페이스를 통해 중첩된 인라인의 순서를 쉽게 바꿀 수 있다.
- 설치 방법 :
pip install django-nested-admin
- 사용 방법 :
# settings.py
INSTALLED_APPS = [
...
"nested_admin",
}
# admin.py
import nested_admin
class ProductImageInline(nested_admin.NestedStackedInline):
model = ProductImage
extra = 1
class ProductLineInline(nested_admin.NestedStackedInline):
model = ProductLine
inline = [ProductImageInline]
extra = 1
class ProductAdmin(nested_admin.NestedModelAdmin):
inline = [ProductLineInline]
...
- rerefence :
https://gonna-be.tistory.com/6
https://github.com/theatlantic/django-nested-admin
https://github.com/seonkyuKim/manage_web_docker_compose
'Study > django' 카테고리의 다른 글
[DRF] Django with FCM - firebase push message 자료 정리 (0) | 2024.03.09 |
---|---|
[DRF] drf-writable-nested 사용 방법에 대한 정리 (0) | 2024.03.07 |
django orm deep dive 1 - DJ101 | Django Database ORM Mastery Course (1) | 2024.03.06 |
[UDEMY]Django DRF Project: eCommerce RESTful API 강의 평가 (0) | 2024.03.01 |
[UDEMY]Django DRF Project: eCommerce RESTful API 강의 정리 (0) | 2024.03.01 |
댓글