Django ForeignKey self conditions

У меня есть модель, где каждый персонаж имеет поля 'mother' и 'father'. Они являются FroeignKey, который ссылается на себя. Я хочу поставить условие для пола, 'F', 'Female' для поля матери и 'H', 'Male' для поля отца.

class Character(models.Model):
    H = 'Male'
    F = 'Female'
    GENDER_CHOICES = (
        (H, 'Male'),
        (F, 'Female'),
    )
    
    last_name = models.fields.CharField(max_length=100)
    first_name = models.fields.CharField(max_length=100)
    gender = models.CharField(max_length=30, choices=GENDER_CHOICES, null=True, blank=True)
    mother = models.ForeignKey('self', blank=True, null=True, on_delete=models.SET_NULL, related_name='linkmother')
    father = models.ForeignKey('self', blank=True, null=True, on_delete=models.SET_NULL, related_name='linkfather')
    date_birth = models.DateField(default=date.today, null=True, blank=True)
    date_death = models.DateField(default=date.today, null=True, blank=True)

    def __str__(self):
        return f'{self.first_name} {self.last_name}'

Вы можете работать с параметром limit_choices_to=… [Djangod-doc]:

class Character(models.Model):
    H = 'Male'
    F = 'Female'
    # …
    gender = models.CharField(
        max_length=30,
        choices=GENDER_CHOICES,
        null=True,
        blank=True
    )
    # …
    mother = models.ForeignKey(
        'self',
        blank=True,
        null=True,
        on_delete=models.SET_NULL,
        related_name='children_as_mother',
        limit_choices_to={'gender': F}
    )
    father = models.ForeignKey(
        'self',
        blank=True,
        null=True,
        on_delete=models.SET_NULL,
        related_name='children_as_father',
        limit_choices_to={'gender': H}
    )
    # …
Вернуться на верх