ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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를 오버라이드 해서 사용할 수 있습니다.

    댓글

Designed by Tistory.