首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在ManytoMany字段中对Django管理员隐藏一些用户组

在Django中,可以通过自定义ModelAdmin类来隐藏ManyToMany字段中的用户组。以下是实现该功能的步骤:

  1. 创建一个新的ModelAdmin类,继承自Django内置的admin.ModelAdmin类。
  2. 在新的ModelAdmin类中,重写get_form方法,用于动态修改表单字段。
  3. 在get_form方法中,获取当前登录的管理员用户,并根据需要隐藏的用户组进行过滤。
  4. 使用exclude属性将需要隐藏的用户组从ManyToMany字段中排除。
  5. 将修改后的表单返回。

下面是一个示例代码:

代码语言:txt
复制
from django.contrib import admin
from django.contrib.auth.models import Group

class CustomModelAdmin(admin.ModelAdmin):
    def get_form(self, request, obj=None, **kwargs):
        form = super().get_form(request, obj, **kwargs)
        
        # 获取当前登录的管理员用户
        admin_user = request.user
        
        # 需要隐藏的用户组名称列表
        hidden_groups = ['Group1', 'Group2']
        
        # 根据需要隐藏的用户组进行过滤
        groups_to_exclude = Group.objects.filter(name__in=hidden_groups)
        
        # 使用exclude属性将需要隐藏的用户组从ManyToMany字段中排除
        form.base_fields['groups'].queryset = form.base_fields['groups'].queryset.exclude(id__in=groups_to_exclude)
        
        return form

# 注册你的ModelAdmin类
admin.site.register(YourModel, CustomModelAdmin)

在上述示例中,我们创建了一个名为CustomModelAdmin的自定义ModelAdmin类,并重写了get_form方法。在该方法中,我们获取当前登录的管理员用户,并根据需要隐藏的用户组进行过滤。然后,使用exclude属性将需要隐藏的用户组从ManyToMany字段中排除。最后,将修改后的表单返回。

请注意,上述示例中的"YourModel"应替换为你自己的模型类名。

这样,当管理员访问该模型的编辑页面时,将只显示不包含需要隐藏的用户组的ManyToMany字段选项。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券