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



我有这个模型

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 管理员中,我定义了搜索和自动完成字段:

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 小部件,这适用于我想添加搜索的情况。有没有办法将查询集过滤到某个字段?

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

最新更新