我们有这个型号:
# 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
?
为了实现这一点,您需要自定义管理页面中使用的表单来创建类别模型的实例。您可以重写 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)