确定在特定 django 字段管理员中查找哪些字段(select2)

Posted

技术标签:

【中文标题】确定在特定 django 字段管理员中查找哪些字段(select2)【英文标题】:Determine which fields to look for(select2) in a specific django field admin 【发布时间】:2018-11-17 09:30:12 【问题描述】:

我有这个模型

class Appointment(models.Model):
    patient = models.ForeignKey(Profile, on_delete=models.CASCADE)
    doctor = models.ForeignKey(Profile, on_delete=models.CASCADE)
    nurse = models.ForeignKey(Profile, on_delete=models.CASCADE)
    datetime = models.DateTimeField()
   ....

在 django admin 中我定义了搜索和自动完成字段:

search_fields = (
        'patient__first_name', 'patient__last_name',
        'doctor__first_name', 'doctor__last_name', 'nurse__first_name',
        'nurse__last_name', 
    )

    autocomplete_fields = ['patient', 'doctor', 'nurse']

我已经尝试过这样做:

def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == 'patient':
        kwargs['queryset'] = Profile.objects.filter(role=PATIENT)
    if db_field.name == 'doctor':
        kwargs['queryset'] = Profile.objects.filter(role=DOCTOR)
    if db_field.name == 'nurse':
        kwargs['queryset'] = Profile.objects.filter(role=NURSE)

    return super().formfield_for_foreignkey(db_field, request, **kwargs)

但它不适用于 select2 小部件,当我想添加搜索时适用。 有没有办法将查询集过滤到某个字段?

【问题讨论】:

【参考方案1】:

我还没有在 django 中找到任何原生解决此问题的方法。我使用了dal select2 表单。我为每个配置文件字段定义Select2QuerySetView,并在其中过滤查询集+按搜索过滤。

【讨论】:

以上是关于确定在特定 django 字段管理员中查找哪些字段(select2)的主要内容,如果未能解决你的问题,请参考以下文章

Django 在不使用字段查找的情况下从查询集中排除特定实例

Django Admin显示/隐藏字段如果在下拉菜单中选择了特定值

如何在django-admin中隐藏特定记录的字段?

在inlineformset的形式中,我怎么知道哪些是我的默认表单字段,哪些是Django添加的字段?

Django 管理中的精确字段搜索

确定应该在 DB2 中创建哪些索引以优化特定查询的性能