如何跟随Django反向外键,然后是另一个反向外键?

时间:2015-10-01 03:51:09

标签: python django django-models django-orm

假设我有3个Django模型:

mymodela / models.py:

class MyModelA(models.Model):
    my_int = models.IntegerField()
    created_ts = models.DateTimeField()

mymodelb / models.py:

from mymodela.models import mymodela
class MyModelB(models.Model):
    my_int = models.IntegerField()
    my_a = models.ForeignKey(MyModelA, related_name="MyModelB_a")
    created_ts = models.DateTimeField()

mymodelc / models.py:

from mymodelb.models import MyModelB
class MyModelC(models.Model):
    my_int = models.IntegerField()
    my_b = models.ForeignKey(MyModelB, related_name="MyModelC_b")
    created_ts = models.DateTimeField()

我有一个名为MyModelA的{​​{1}}实例。我想计算这个QuerySet:

a

但是,我需要在MyModelC.objects.filter(my_b__my_a=a).latest("created_ts") 的方法中计算此查询集。由于a不导入MyModelA,因此我无法直接执行此操作。我需要按照反向链接。但是,如何按两次反向链接来获得我需要的东西呢?

1 个答案:

答案 0 :(得分:1)

mymodela/models.py中(顺便说一下,我不确定为什么你将所有模型分成这样的单独目录 - 除非这是故意的,否则你可以考虑将它们全部放在你的应用程序中#39 ; s models.py文件):

class MyModelA(models.Model):
    my_int = models.IntegerField()
    created_ts = models.DateTimeField()

    # A method that will fetch the most recent related MyModelC 
    def get_latest_c(self):
        from mymodelc.models import MyModelC
        return MyModelC.objects.filter(my_b__my_a=self).latest("created_ts")

现在,当您有MyModelA名为a的实例时,请致电a.get_latest_c()以获取最新的相关MyModelC对象。