Django / ModelAdmin
학습 강의
nomadcoders.co/airbnb-clone/lobby
Django Admin Interface
장고 앱에서 모델을 생성하면, 신뢰할 수 있는 유저(일반 유저x, 웹마스터 o, 프론트엔드용이 아니다)가 웹사이트를 모델 중심으로 관리할 수 있는 인터페이스가 자동으로 생성된다.
ModelAdmin
ModelAdmin 클래스는 admin 인터페이스에 있는 모델을 나타내며, 보통 admin.py 에 저장되어있다.
우선 예시 먼저 살펴보자. myapp의 models.py의 Author 클래스를 admin.py에 연결하려고 한다. 아래 두 가지 방법 중 어느 것을 사용해도 상관 없다.
- 사용 코드 예시 (1)
from django.contrib import admin
from myproject.myapp.models import Author
class AuthorAdmin(admin.ModelAdmin):
pass
admin.site.register(Author, AuthorAdmin)
- 사용 코드 예시 (2) : decorator 사용
from django.contrib import admin
from .models import Author
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
pass
ModelAdmin 유용한 기능
아래 링크를 통하면 더 많은 기능에 대해 참고할 수 있다. 이번 포스팅에서는 그 중 몇 가지만 보려고 한다.
docs.djangoproject.com/en/3.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields
ModelAdmin.fieldsets
- admin form 페이지의 레이아웃을 관리하기 위해 설정할 수 있는 기능이다.
- 여러 가지 필드들을 동일한 카테고리에 모아서 보여주고 싶은 경우에 fieldsets을 통해 display 형태를 바꾸면 된다.
- format : ( name, field_options)
name 에는 fieldset을 대표할 만한 이름을, field_options에는 fieldset에 담길 정보를 dictionary 형태로 넣는다.
- 사용 예시
fieldsets = (
(None, {
'fields': ('url', 'title', 'content', 'sites')
}),
('Advanced options', {
'classes': ('collapse',),
'fields': ('registration_required', 'template_name'),
}),
)
ModelAdmin.list_filter
- admin 리스트를 보여주는 페이지에 원하는 기준에 따라 filter를 적용하고 싶을 때 사용
- 설정 시 오른쪽 사이드 바에 보여진다.
- list나 tuple 로 정의되며, 각각의 요소는 다음의 타입들만 허용된다.
BooleanField, CharField, DateField, DateTimeField, IntegerField, ForeignKey or ManyToManyField
- 사용 코드 예시
No를 선택하면, superhost = False 인 객체들만 리스트에 나타난다.
list_filter = (
'superhost',
)
ModelAdmin.list_display
- admin 페이지에서 리스트를 보여줄 때 원하는 field를 테이블 형식으로 함께 보여준다.
- 사용 코드 예시
list_display = (
"username", "first_name", "last_name", "email", 'is_active', "language", 'currency', 'superhost', 'is_staff', 'is_superuser',
)
ModelAdmin.search_fields
- admin 페이지에서 원하는 필드로 검색 기능을 추가하고 싶을 때 사용하는 기능이다.
- 검색 결과 매칭되는 것들만 리스트에 보여진다.
- Prefix를 이용하여 원하는 방식으로 검색을 가능하게 할 수 있다.
- 사용 코드 예시
search_fields = ("name",)
참고
docs.djangoproject.com/en/3.1/ref/contrib/admin/