2013-07-09 1 views
2

문제는 Gift라는 모델입니다. 그리고 그것은 객체가 생성 될 때 관리자 인터페이스에서 숨기고 싶은 부울 필드 인 'giftbought'를 가지고 있으며, 업데이트 될 때 그것을 보여줍니다. Django 사용자 정의 양식 (관리자 용) 동적으로 필드 삭제

나는 초기화를 오버라이드 (override), 양식을 만드는 tryed 방법 같은 :

class GiftForm(forms.ModelForm): 
    giftbought = forms.BooleanField(label=u"Bought?", required=False) 

    class Meta: 
     model = Gift 

    def __init__(self, *args, **kwargs): 
     super(GiftForm, self).__init__(*args, **kwargs) 
     if not self.instance.pk: 
      del self.fields['giftbought'] 

그러나 그것은 말했다되는 것처럼, 관리자 작동하지 않습니다 : 내가 필요 Remove fields from ModelForm

I 일 get_form 메서드를 재정의하는 ModelAdmin 클래스를 만들 수 있지만 is_instance 여부를 확인하는 방법을 모르겠습니다 ...

class GiftAdmin(admin.ModelAdmin): 
    model = Gift 

    def get_form(self, request, obj=None, **kwargs): 
     # that IF doesnt work!!! 
     if not self.instance.pk: 
      self.exclude = ('giftbought',) 
     return super(GiftAdmin, self).get_form(request, obj=None, **kwargs) 

admin.site.register(Gift, GiftAdmin) 

힌트가 있습니까?

답변

0

확실히 가장 좋은 내기는 ModelAdmin입니다. 나는 당신이 if 시험을 제외하고는 맞다고 생각합니다.

이처럼 할 수 있어야한다 : 방법 코드에 약간의 변화가있을

class GiftAdmin(admin.ModelAdmin): 
    model = Gift 

    def get_form(self, request, obj=None, **kwargs): 
     self.exclude = [] 
     # self.instance.pk should be None if the object hasn't yet been persisted 
     if obj is None: 
      self.exclude.append('giftbought') 
     return super(GiftAdmin, self).get_form(request, obj, **kwargs) 

admin.site.register(Gift, GiftAdmin) 

알 수 있습니다. check the docs해야합니다. 필요한 모든 것을 찾을 수있을 것입니다.

희망이 도움이됩니다.

+0

안녕하세요 Paulo .. 삽입하고 업데이트하는 중 오류가 발생했습니다. 'GiftAdmin'개체에 'pk'속성이 없습니다. – StaticX

+0

처음에는 어떻게 받아들였습니까? self.instance.pk? –

+0

"obj가 None이면"으로 바뀌 었습니다! self.instance도 존재하지 않습니다. – StaticX

관련 문제