问题是我有一个名为Gift的模型。它有一个布尔字段'giftbought',我想在创建对象时隐藏在管理界面中,并在更新时显示它。
我尝试制作一个表单,覆盖 init 方法,如:
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
我需要创建一个ModelAdmin类,重写get_form方法,但我不知道如何检查我是否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 :(得分: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,我确定你会在那里找到你需要的一切。
希望这有帮助!