我有几个非常定制的 Django ModelAdmins,如果用户是超级用户,我想添加额外的字段。我发现有人说要像这样覆盖 get_fieldsets 方法
def get_fieldsets(self, request, obj=None):
fieldsets = super(PageAdmin, self).get_fieldsets(request, obj)
if request.user.is_superuser:
fieldsets[0][1]['fields'].insert(0,'group')
fieldsets[0][1]['fields'].insert(2,'is_live')
else:
groups = request.user.page_groups.filter(
is_live = True,
)
if groups.count() > 1:
fieldsets[0][1]['fields'].insert(0,'group')
return fieldsets
这有效(有点),我喜欢使用 get_fieldsets,因为它让我可以将字段分组到字段集中。我还在此管理员上使用 get_form,因为该表单有几个特定于用户的表单字段,这些字段具有基于用户的查询集。
def get_form(self, request, obj=None, **kwargs):
if request.user.is_superuser:
return PageForm
else:
form = RestrictedPageForm
form.owner = request.user #(this may be a bad way to do this but it works I think)
return form
现在我遇到了我认为是线程问题。
发生的情况是,如果您在浏览器中快速刷新 change_form 页面,您将在表单中看到多个“group”或“is_live”字段。
我真的很喜欢利用管理员来让我不必写所有东西,但我不知道如何正确地做到这一点。任何帮助或建议将不胜感激!