我们有这个模型:

# 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页中创建一个实例时,我如何强制表单在多项 Select 中只显示superusers

推荐答案

由于帮助文本说你只想 Select 超级用户,你可能想过滤allModelForms,所以ModelAdmin中的那些,但(也许)future 的ModelForms.

一个简单的方法是用limit_choices_to=… parameter [Django-doc].然后,这将过滤它为该字段提供给表单的QuerySet,并进行适当的验证:

from django.conf import settings


class Category(models.Model):
    # …
    users = models.ManyToManyField(
        settings.AUTH_USER_MODEL,
        help_text='Choose Superusers only',
        blank=True,
        limit_choices_to={'is_superuser': True},
    )

因此,这将自动在ModelAdmin上工作,因为它在窗帘后面使用了ModelForm,但也适用于所有的"vanilla"Django ModelForm和可能大多数Django包,插件等.

Django相关问答推荐

Django测试:如何模拟Django_apps.get_Model()的LookupError

在 Django 中重组多对多字段

使用django提交后如何保留html表单数据?

Django中的多对多关系?

设置 SECURE_HSTS_SECONDS 可以不可逆转地 destruct 您的网站?

Django REST Framework如何在序列化程序中引发验证错误时指定错误代码

获取结果集中返回的元素数的 django 模板标签是什么?

我的 django 模板布尔变量在 javascript 中没有按预期工作

Django 模型中的隐藏字段

AttributeError:'Manager'对象在Django中没有属性'get_by_natural_key'错误?

在生产中使用 Django 中的 SQLite?

在 django 模板中遇到 user.is_authenticated 问题

如何将 ManyToManyField 呈现为复选框?

升级到 Django 1.8 后提供的固定默认值

在 django admin 中链接到外键对象

RemovedInDjango18Warning:不推荐创建没有fields属性或 exclude属性的 ModelForm

具有 2 种语言的 Django 站点

Django Rest 框架 ImageField

Django 测试 - 在所有测试中修补对象

在 Django 中使用 select_related Select 特定字段