Djnago 管理中选择字段的自定义查询

问题描述 投票:0回答:1

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

我有很多用户,我需要按组过滤以减少选择数量。

admin panel - select input

除了对整个模型进行自定义查询之外,我没有找到任何东西。

任何例子对我来说就足够了。

我使用内置的组模型。 假设,我只想在下面的模型的“Director”组的“用户”字段中看到。

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

目前,我使用默认值: admin.site.注册(邀请)

django django-admin
1个回答
0
投票

如果您想在应用程序范围内执行此操作,可以使用

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)

注意:通常使用

settings.AUTH_USER_MODEL
 [Django-doc] 来引用用户模型比使用
User
模型 [Django- doc]
直接。有关更多信息,您可以参阅文档的引用
User
模型
部分[Django-doc]

© www.soinside.com 2019 - 2024. All rights reserved.