python - DjangoForeignKey self 条件

标签 python django django-models

我有一个模型,其中每个角色都有“母亲”和“父亲”字段。它们是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/

相关文章:

Python解析字符串列表

javascript - 当 django 中未提供任何输入字段时,Ajax 函数不会执行

django - 根据其他字段在 Django 中的用户模型中自动创建用户名

Django:在保存之前将模型对象分配为外键

python - django中定义模型的顺序

python - 从 tensorflow 链接加载 tarball 中的图像以训练 CNN

python - 如何限制我的 python 脚本只接受一个参数? (argparse)

python - 无法使用 Matplotlib 在 X 轴上显示时间

sql - Django:根据相交对象(共同 friend )的数量排序项目

python - 谷歌应用引擎 + 谷歌云存储 + Sqlite3 + Django/Python