You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django Admin创建实例时让ManyToManyField仅显示超级用户

Django Admin中限制多选框仅显示超级用户的方法

针对你的Category模型多对多字段users的需求,要在Admin页面创建实例时只显示超级用户,有两种常用实现方式:

方法一:重写ModelAdmin的formfield_for_manytomany方法

在项目的admin.py中,为Category模型自定义ModelAdmin类,通过重写formfield_for_manytomany方法过滤用户查询集:

# admin.py
from django.contrib import admin
from .models import Category
from django.conf import settings

User = settings.AUTH_USER_MODEL

@admin.register(Category)
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)

方法二:自定义ModelForm

通过创建自定义表单,在表单初始化时修改users字段的查询集:

# admin.py
from django.contrib import admin
from django import forms
from .models import Category
from django.conf import settings

User = settings.AUTH_USER_MODEL

class CategoryForm(forms.ModelForm):
    class Meta:
        model = Category
        fields = '__all__'
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 过滤出仅超级用户的选项
        self.fields['users'].queryset = User.objects.filter(is_superuser=True)

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    form = CategoryForm

两种方法都能实现相同的效果,你可以根据项目的代码结构习惯选择其中一种。

内容的提问来源于stack exchange,提问作者nino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:57:09