我有一个模型,其中每个角色都有“母亲”和“父亲”字段。它们是FroeignKey,指的是self。我想为性别设置条件,“F”、“女”为母字段,“H”、“男”为父字段。
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=…
parameter [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',
<strong>limit_choices_to={'gender': F}</strong>
)
father = models.ForeignKey(
'self',
blank=True,
null=True,
on_delete=models.SET_NULL,
related_name='children_as_father',
<strong>limit_choices_to={'gender': H}</strong>
)
# …
关于python - DjangoForeignKey self 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72474880/