-
django admin get_fields method 오버라이드 하기django 2021. 2. 17. 13:35
장고 어드민 get_fields 메서드 오버라이드 하는 방법에 대해 알아보겠습니다.
우선, 오버라이드 하지 않은 기본 상태의 코드와 그때의 어드민 화면입니다.
class IncomeAdmin(admin.ModelAdmin): model = Income admin.site.register(Income, IncomeAdmin)
보는 바와 같이 price, category, user, memo 총 4가지 필드가 있습니다.
get_fields는 이 필드에 관한 메서드 입니다.
우선 가공하지 않고 get_fields함수 그대로의 내용을 출력해보겠습니다.
class IncomeAdmin(admin.ModelAdmin): model = Income def get_fields(self, request, obj=None): fields = super(IncomeAdmin, self).get_fields(request, obj) print(fields) print(type(fields)) return fields
return된 fields는 list형태 입니다.
이제 커스텀을 해보겠습니다.
예로, category를 제거 하고 싶다면 아래처럼 하면 됩니다.
def get_fields(self, request, obj=None): fields = super(IncomeAdmin, self).get_fields(request, obj) fields.remove('category') return fields
사진을 보시면 category가 사라진 것을 알 수 있습니다.
매우 간단합니다.
이 메서드를 활용할 수 있는 예시를 몇가지 생각해보았습니다.
1) request.user.groups 으로 그룹을 확인해서 특정 그룹에 속한 어드민일 경우 특정 정보를 감춘다.
2) 데이터가 특정 값을 땐 특정 필드를 보여주거나 숨긴다.
2)의 예시를 활용해서, 카테고리가 '용돈'인 데이터는 price를 감춰보겠습니다.
def get_fields(self, request, obj=None): fields = super(IncomeAdmin, self).get_fields(request, obj) if obj.category.name == "용돈": fields.remove("price") return fields
용돈인 경우 가격이 사라졌습니다.
이런 식으로 get_fields를 오버라이드 해서 사용할 수 있습니다.'django' 카테고리의 다른 글
사수 없이 버틴 주니어 백엔드 개발자 첫 1년 회고 (16) 2021.06.22 django admin get_queryset method override하기 (0) 2021.02.16