Определите, какие поля искать (select2) в определенном поле администратора django - PullRequest
0 голосов
/ 07 июня 2018

У меня есть эта модель

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 Ответ

0 голосов
/ 07 июня 2018

Я не нашел решения этой проблемы с помощью native в django.Я использовал dal select2 form.Я определяю Select2QuerySetView для каждого поля профиля и фильтрую в нем набор запросов + фильтр по поиску.

...