我做了以下事情。不确定它是否正确:
class FooAdmin(admin.ModelAdmin):
fieldsets = (
# ...
)
other_fieldsets = (
# ...
)
def get_fieldsets (self, request, obj = None):
if some_cond:
return self.other_fieldsets
return self.fieldsets
更新:def
丢失。但是,当我得到Django检查错误时,这不是问题。
现在,在此管理模型上,当我保存它时,会在顶部提供标准字段验证错误,但没有字段被标记为无效。我尝试将所有字段设置为blank = True
,但我只能删除get_fieldsets()。
答案 0 :(得分:1)
正如Yuji Tomita指出的那样,如果不使用get_form()覆盖表单,则不能使用get_fieldsets():
class MyModelAdmin(admin.ModelAdmin):
def get_fieldsets(self, request, obj=None):
if obj:
return [(None, {'fields': ('field_c', 'field_b')})]
return [(None, {'fields': ('field_a', 'field_b', 'field_c')})]
def get_form(self, request, obj=None, **kwargs):
if obj:
defaults = {'exclude': ('field_a',)}
else:
defaults = {}
defaults.update(kwargs)
return super(MyModelAdmin, self).get_form(request, obj, **defaults)
由于我只是将表单拆分为字段集并根据用户显示它们,我认为在这种情况下,Django仍然认为它需要验证由于get_fieldsets()而实际上不在表单中的字段。在get_forms()中排除这些字段后,事情开始起作用。
非常感谢Yuji Tomita。
答案 1 :(得分:0)
这里显然存在语法错误。您需要def
关键字来定义函数。像这样:
def get_fieldsets (self, request, obj = None):
if some_cond:
return self.other_fieldsets
return self.fieldsets
但这也不会起作用(虽然语法正确),因为它必须由管理员调用。
问题是,您尝试根据用户发送的请求设置不同的字段集。我认为目前不可能,因为您可以一次性地在一个类中静态设置字段集。你能解释一下,你究竟想要达到的目的,也许我们可以找到一些解决方案。