Django - ограничить выбор того, что не выбрано в форме администратора - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть модель, как показано ниже.Интересно, как я могу ограничить выбор для 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']

Спасибо.

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