是否可以对该字段进行自定义查询?

我有很多用户,我需要按组过滤,以减少 Select 的数量.

admin panel - select input

除了对整个模型进行定制查询外,我什么都没有找到.

对我来说,任何一个例子都足够了.

我使用内置的组模型. 让我们说,我想在用户字段中只看到从组"导演"下面的模型.

class Invitation(models.Model):
    school = models.ForeignKey(School, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

现在,我使用default: admin.site.register(邀请)

推荐答案

如果要在整个应用程序范围内执行此操作,可以使用limit_choices_to=… [Django-doc]:

class Invitation(models.Model):
    school = models.ForeignKey(School, on_delete=models.CASCADE)
    user = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        limit_choices_to={'groups__name': 'Director'},
    )

如果您只想在ModelAdmin中应用此选项,则可以通过覆盖.formfield_for_foreignkey(…) [Django-doc]来限制查询集:

@admin.site.register(Invitation)
class InvitationAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'user':
            kwargs['queryset'] = User.objects.filter(groups__name='Director')
        return super().formfield_for_foreignkey(db_field, request, **kwargs)

Note:通常情况下,使用settings.AUTH_USER_MODEL [Django-doc]来引用用户模型比直接使用User model [Django-doc]要好.欲了解更多信息,您可以查看referencing the User model section of the documentation [Django-doc].

Django相关问答推荐

为什么Docker compose没有这样的文件或目录?

django re_path() 函数模式与包含该模式的 url 不匹配

测试 - 两个类共享相同的登录代码,但它只能在一个类中工作

从url参数过滤的Django日期范围返回空查询集

- 不支持的操作数类型:DateField和DateField

Django 长时间运行带有线程/处理的异步任务

带有代码完成功能的 python / django 的 Sublime Text 2 和 3 设置

django-rest-framework 如何使模型序列化器字段成为必需

JSP模板继承

如何访问 Django Rest Framework 上的自定义 HTTP 请求标头?

在 Django 中,您可以向查询集添加方法吗?

django npm 和 node 包架构

在 Django 中获取下一个和上一个对象

使用 lambda 作为属性的默认值时,Django 1.7.1 Makemigrations 失败

Django:在管理界面中显示图像

Django 和 VirtualEnv 开发/部署最佳实践

如何在不发送信号的情况下保存模型?

javascript 文件中的 Django {% static 'path' %}

如何在 Django 中创建一个非空的 CharField?

如何更改 django 模板中布尔值的打印方式?