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

我有很多用户,我需要按组过滤,以减少 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相关问答推荐

Django中的Sync_to_Async修饰器、异步视图

如何在创建对象后立即运行一次代码?

无法在 docker 启动Django项目

Urls.py中路径**kwargs的Django翻译?

当使用django-tinymce时,我在哪里指定referer?

如何在 Django 中设置与 Session 相关的字段

Nginx 响应 404 not found on Django media URL in preprod, dev ok

Django ORM:获取每个类别的月平均价格

基于每个条目的 Django Queryset 过滤

Django - 站点匹配查询不存在

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

相关字段查找无效:​​icontains

Django - 强制执行 ManyToManyField 唯一项

Django:创建索引:非唯一,多列

Python Django 模板和测试变量是否为空或空字符串

如何在 Django 中执行批量插入?

django 应用基于条件的样式类

ModelForm 上的 Django 和字段集

Django 模型方法 - create_or_update

如何在 django 模板中呈现有序字典?