У меня есть модель, как показано ниже.Интересно, как я могу ограничить выбор для self.fields['wife']
всеми людьми, которые имеют тот же generation
, что и текущий, который находится на экране, который будет создан (еще не сохранен), а также ограничиться только тем, что не было выбрано.
class Person(models.Model):
GENERATION_CHOICES = (
(1, 'First generation'),
(2, 'Second generation'),
(3, 'Third generation'),
(4, 'Fourth generation'),
(5, 'Fifth generation'),
)
last_name = models.CharField(max_length=50)
middle_name = models.CharField(max_length=50, blank=True)
first_name = models.CharField(max_length=50)
generation = models.IntegerField(choices=GENERATION_CHOICES, default=False)
gender = models.CharField(max_length=1,
choices=(('M', 'Male'), ('F', 'Female')),
blank=False,
default=None)
father = models.ForeignKey('self',
blank=True,
null=True,
on_delete=models.SET_NULL,
related_name='children_of_father',
limit_choices_to={'gender': 'M'})
mother = models.ForeignKey('self',
blank=True,
null=True,
on_delete=models.SET_NULL,
related_name='children_of_mother',
limit_choices_to={'gender': 'F'})
wife = models.ForeignKey('self',
blank=True,
null=True,
on_delete=models.SET_NULL,
related_name='wife_of',
limit_choices_to={'gender': 'F'})
husband = models.ForeignKey('self',
blank=True,
null=True,
on_delete=models.SET_NULL,
related_name='husband_of',
limit_choices_to={'gender': 'M'})
А в admin.py:
class CustomPersonModelForm(forms.ModelForm):
class Meta:
model = Person
fields = '__all__'
def __init__(self, *args, **kwargs):
super(CustomPersonModelForm, self).__init__(*args, **kwargs)
self.fields['wife'].queryset = Person.objects.filter(generation=???)
class PersonAdmin(admin.ModelAdmin):
form = CustomPersonModelForm
list_display = ['generation', 'last_name', 'gender']
Спасибо.