Это мои модели:
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
?