gpt4 book ai didi

django - 将排除与 Django 字段集一起使用

转载 作者:行者123 更新时间:2023-12-01 01:27:30 25 4
gpt4 key购买 nike

我正在尝试为模型编写一个动态表单,允许具有不同权限的用户做不同的事情。我希望下面的代码能够正常运行,以便非 super 用户无法编辑“商家”块中的任何字段。

class CategoryModelAdmin(LWModelAdmin):
fieldsets = (
('Merchant', {'fields': ('merchant',) }),
('Category', { 'fields': ('name', 'parent',) }),
)
def get_form(self,request,obj=None, **kwargs):
if request.user.is_superuser:
self.exclude = []
else:
self.exclude = ['Merchant']
return super(CategoryModelAdmin,self).get_form(request, obj=None, **kwargs)

虽然我可以通过下面的代码实现这种效果,但我真的在寻找“正确”的方法来做到这一点,感觉使用 exclude 是可行的方法,但无论如何我似乎都无法做到我试试。
class CategoryModelAdmin(LWModelAdmin):
declared_fieldsets = None
admin_fieldsets = (
(None, {'fields': ('merchant',) }),
('Category', { 'fields': ('name', 'parent',) }),
)
restricted_fieldsets = (
('Category', { 'fields': ('name', 'parent',) }),
)

def get_fieldsets(self, request, obj=None):
if request.user.is_superuser:
fieldsets = self.admin_fieldsets
else:
fieldsets = self.restricted_fieldsets
return LWModelAdmin.fieldsets + fieldsets

def get_form(self, request, obj=None, **kwargs):
self.declared_fieldsets = self.get_fieldsets(request, obj)
return super(self.__class__, self).get_form(request, obj)

最佳答案

您的代码不是线程安全的,您不应该在您的自定义 ModelAdmin 方法中设置 self ( self.exclude 等)的属性。而是使用 ModelAdmin.get_form 的 kwargs和 InlineModelAdmin.get_formset得到你想要的。

这是一个简单的例子:

class CategoryModelAdmin(LWModelAdmin):
def get_form(self, request, obj=None, **kwargs):
if request.user.is_superuser:
kwargs['exclude'] = ['foo', 'bar',]
else:
kwargs['fields'] = ['foo',]
return super(CategoryModelAdmin, self).get_form(request, obj, **kwargs)

关于django - 将排除与 Django 字段集一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com