Django 管理站点中的不同字段集取决于用户组

Luí*_*reu 2 django django-admin python-3.x

在我的 django 管理站点中,我想向组(控制器组)内的用户隐藏一些字段

最好的方法是什么?我们可以做这样的事情吗?

这是我的代码,但它不起作用:

管理员.py:

class PriceFile(admin.ModelAdmin):
    if User.groups.filter(name='Controllers').exists():
        fieldsets = [(None, {'fields':['print_url', ('model', 'client'), 'description']})]  
    else:
        fieldsets = [(None, {'fields':['print_url', ('model', 'client'), 'description', 'total_sum', 'margin_percent', 'final_price']})]
Run Code Online (Sandbox Code Playgroud)

小智 8

你已经解决这个问题了吗?

Django Admins 有一个名为的方法get_fieldsets,您可以使用该方法来决定可以添加哪个字段集。您的可能如下所示:

@admin.register(ModelName)
class ModelAdmin(admin.ModelAdmin):

    def get_fieldsets(self, request, obj=None):
        if request.user.is_superuser:
            return self.superuser_fieldsets
        else:
            return self.staff_fieldsets

    staff_fieldsets =  (
        (None, {'fields': ('regular_field_a', 'regular_field_b')})
    )

    superuser_fieldsets =  (
        (None, {'fields': ('regular_field_a', 'regular_field_b')}),
        (None, {'fields': ('super_user_field_a', 'super_user_field_b')})
    )
Run Code Online (Sandbox Code Playgroud)

该函数get_fieldsets可以访问请求和对象,我在这里所做的是根据用户的状态(is_superuser在本例中)我们提供不同的字段集。您可以添加自己的要求,例如,用户是否属于身份验证组,或者是否取决于您所看到的对象。