2017-12-27 12 views
1

djano-admin에서 특정 레코드의 필드를 숨기는 방법은 무엇입니까? 예를 들어 내가 모델에게있는 경우django-admin에서 특정 레코드의 필드를 숨기는 방법?

class Book(models.Model): 
    title = models.CharField(..., null=True) 
    author = models.CharField(...) 

나는 그것은 내가 가겠다 잘 전까지 작동

class BookAdmin(admin.ModelAdmin): 
    list_display = ("pk", "get_title_or_nothing") 

    def get_form(self, request, obj=None, **kwargs): 
     if obj.pk == "1": 
      self.exclude = ("author",) 
     form = super(BookAdmin, self).get_form(request, obj, **kwargs) 
     return form 

과 해결책을 발견 = 1. PK와 레코드 관리자 패널에서 저자를 숨기려면 pk == 1 인 레코드를 다른 레코드로 되돌려 놓습니다.이 경우 테이블의 모든 레코드는 저자 필드를 hided했습니다.

답변

2

이 이유는 "author" 필드가 self.exclude에 추가되면 해당 필드에 그대로 남아 있기 때문입니다. 장고> = 1.11의 경우

:

동적으로ModelAdmin.get_exclude에 필드를 제외 할 더 나은 장소. Django 1.11에서 소개되었습니다. 이 같은 것을 할 수있는 이전 버전의

, : 장고 < 1.11를 들어


def get_exclude(self, request, obj=None, **kwargs): 
    if obj and obj.pk == 1: 
     # don't modify self.exclude 
     # instead return it with the extra added field 
     return self.exclude + ('author',) 
    return self.exclude 
"지원되지 않는 피연산자 유형 (: 불행하게도

class BookAdmin(...): 
    exclude = (# common excluded fields) 
    original_exclude = exclude 

def get_form(self, request, obj=None, **kwargs): 
    if obj and obj.pk == 1: 
     self.exclude += ('author',) 
    else: 
     # change it back to the original_exclude 
     # for other objects 
     self.exclude = self.original_exclude 
    form = super(BookAdmin, self).get_form(request, obj, **kwargs) 
    return form 
+0

는, 나는 형식 오류를 가지고 s) for : 'NoneType'and 'tuple' " – Popka

+0

@Popka'ModelAdmin' 클래스에서'exclude =()'를 설정하고 다시 시도하십시오. – xyres

+0

작품, 고마워요! – Popka