在Django中,可以通过自定义ModelAdmin类来隐藏ManyToMany字段中的用户组。以下是实现该功能的步骤:
下面是一个示例代码:
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字段选项。
领取专属 10元无门槛券
手把手带您无忧上云