Django autocomplete_fields для нескольких полей в одной форме - PullRequest
0 голосов
/ 25 мая 2020

Это мои модели:

class Person(models.Model):
    first_name = models.CharField('Name', max_length=200)
    family_name = models.ForeignKey(Family, on_delete=models.PROTECT)
    gender_is_male = models.BooleanField(default=True)

class Child(models.Model):
    person = models.OneToOneField(Person, on_delete=models.CASCADE, primary_key=True)
    father = models.ForeignKey(Person, on_delete=models.CASCADE, related_name='father_of', limit_choices_to={'gender_is_male': True})
    mother = models.ForeignKey(Person, on_delete=models.CASCADE, related_name='mother_of', limit_choices_to={'gender_is_male': False})

В моем admin у меня есть следующее:

class ChildForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ChildForm, self).__init__(*args, **kwargs)
        self.fields['person'].queryset = Person.objects.filter(
            Q(child__isnull=True) | Q(child=self.instance)
        )
        self.fields['father'].queryset = Person.objects.filter(husband_of__isnull=False).distinct()
        self.fields['mother'].queryset = Person.objects.filter(wife_of__isnull=False).distinct()

class ChildAdmin(admin.ModelAdmin):
    form = ChildForm
    list_per_page=50
    search_fields=('person__first_name','person__family_name__family_name')

Отдельные наборы запросов, просматривающие одну и ту же таблицу Person, предоставляют списки опций для ChildForm в Django Админ. Когда наборы запросов стали больше, я попытался использовать опцию autocomplete_fields: В PersonAdmin я добавил:

search_fields=('first_name','family_name__family_name')

В ChildAdmin Я добавил:

autocomplete_fields = ['person', 'father', 'mother']

Автозаполнение функция работает нормально, но теперь списки опций для всех трех полей автозаполнения одинаковы и содержат все Person s. Похоже, это противоречит моему мотиву иметь autocomplete s, а именно. чтобы ограничить размеры набора запросов. Например, почему параметры для person должны содержать тех, кто уже children?
Как можно ограничить списки для каждого из полей в соответствии с наборами запросов в ChildForm?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...