首页 > 解决方案 > 如何在 django 中引用 ForeignKey 来填充谱系表?

问题描述

我有两个通过 ForeignKey 和 OneToOneField 相互链接的模型,如下所示:

楷模

class Porumbei(models.Model):
    serie_inel = models.CharField(max_length=25, null=False, blank=False, unique=True,
                              help_text="Seria de pe inel. Ex: RO 123456")
    ...
    ...
    tata = models.ForeignKey('Perechi', to_field='mascul', on_delete=models.CASCADE,
                         related_name="porumbei_masculi", null=True, blank=True)
    mama = models.ForeignKey('Perechi', to_field='femela', on_delete=models.CASCADE,
                         related_name="porumbei_femele", null=True, blank=True)


class Perechi(models.Model):
    ...
    mascul = models.OneToOneField(Porumbei, null=True, on_delete=models.CASCADE, 
                                  limit_choices_to=Q(sex="Mascul"), related_name="perechi_masculi")
    femela = models.OneToOneField(Porumbei, null=True, on_delete=models.CASCADE, 
                                  limit_choices_to=Q(sex="Femelă"), related_name="perechi_femele")
    ...

在模板中,我需要用鸽子的祖先填充一个表。要从数据库中检索鸽子,我使用:

意见

def editareporumbei(request, pk):
    porumbel = get_object_or_404(Porumbei, pk=pk)

然后,在祖先表中,在父亲字段我使用

{{ porumbel.tata.mascul }}

我的问题是我怎样才能得到 porumbel 的祖父,祖父?我怎么能在模板中得到它?提前致谢!

标签: pythondjango

解决方案


您应该可以通过以下方式访问它们

# For grand-father
porumbel.tata.mascul.tata.mascul
# For grand-grand-father
porumbel.tata.mascul.tata.mascul.tata.mascul
# and so on...

推荐阅读