티스토리 뷰

728x90
반응형

 

[1] ModelAdmin

 

장고의 Admin 문서를 보면 ModelAdmin 에 대한 설명이 나옵니다.

ModelAdmin은 admin interface에서 모델을 표현하는 클래스라고 합니다. 

 

admin.py에 이런 식으로 추가해서 쓰면 됩니다. 

 

위 예제처럼 Admin 클래스에 custom values를 define 하지 않는 경우, 

보통 이렇게만 씁니다! 

 

 

 

[2] ModelAdmin > search_fields

 

Admin 클래스에 search_fields를 define하면 admin list page에서 search box를 사용할 수 있습니다. 

 

예를들어 이런 Family 모델이 있을 때, 

class Family(models.Model):
    join_date = models.DateTimeField()
    code = models.TextField()

 

Family의 code 필드로 admin 사이트에서 검색을 하고 싶으면 이렇게 코드를 작성하면 됩니다. 

from django.contrib import admin
from . import models

class FamilyAdmin(admin.ModelAdmin):
    search_fields = ['code']
    
admin.site.register(models.Family, FamilyAdmin)

 

 

그리고 배포하면 admin 사이트에 이렇게 검색창이 나오고

 

 

코드를 기준으로 검색이 잘됩니다! (샘플 데이터임)

 

 

search_fields를 여러개 추가하면 어떻게 될까요?

Family의 join_date 필드도 search_fields에 추가해보겠습니다. 

 

from django.contrib import admin
from . import models

class FamilyAdmin(admin.ModelAdmin):
    search_fields = ['code', 'join_date']
    
admin.site.register(models.Family, FamilyAdmin)

 

그러면 code로도 검색이 되고 join_date로도 검색이 됩니다!

 

 

[2.1] ModelAdmin > search_fields (ForeignKey)

 

아래 형식을 통해 ForeignKey 또는 ManyToManyField 관련 조회를 할 수도 있다고 합니다.

 

 

예를들어 author를 참조하는 blog entry가 있을 때, search_fields를 이렇게 define하면 

author의 email 주소로 blog entry들을 검색할 수 있게 됩니다. 

 

 

저의 프로젝트에도 적용해보겠습니다. 

Profile 은 Family를 ForeignKey로 참조하고 있습니다. 

class Profile(models.Model):
    ...
    family = models.ForeignKey(Family, on_delete=models.SET_NULL, null=True)

 

 

admin.py에 아래 코드를 추가합니다. 

from django.contrib import admin
from . import models

class ProfileAdmin(admin.ModelAdmin):
    search_fields = ['family__code']

admin.site.register(models.Profile, ProfileAdmin)

 

 

그러면 Admin > Profile에 search box가 생기고

family code를 입력하면 해당 family code를 ForeignKey로 참조하는 

profile 들이 검색이 됩니다! (샘플데이터임)

 

 

 

반응형
댓글