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}
)
# …