У меня есть эта модель
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, который применяется, когда я хочу добавить поиск. Есть ли способ отфильтровать набор запросов к определенному полю?