如何在管理页面创建实例时仅在ManyToManyField字段中显示超级用户

问题描述 投票:0回答:1

我们有这个型号:

# models.py

from django.conf import settings
User = settings.AUTH_USER_MODEL

class Category(models.Model):
    ...
    users = models.ManyToManyField(User, help_text='Choose Superusers only', blank=True)  

问题是:

admin
页面创建实例时,如何强制表单在多选时只显示
superusers

django many-to-many admin
1个回答
0
投票

为了实现这一点,您需要自定义管理页面中使用的表单来创建类别模型的实例。您可以重写 ModelAdmin 类的 formfield_for_manytomany 方法来过滤 users 字段的查询集,使其仅包含超级用户。具体方法如下:

# admin.py

from django.contrib import admin
from .models import Category
from django.contrib.auth.models import User

class CategoryAdmin(admin.ModelAdmin):
    def formfield_for_manytomany(self, db_field, request, **kwargs):
        if db_field.name == "users":
            kwargs["queryset"] = User.objects.filter(is_superuser=True)
        return super().formfield_for_manytomany(db_field, request, **kwargs)

admin.site.register(Category, CategoryAdmin)
© www.soinside.com 2019 - 2024. All rights reserved.