python - 我怎样才能跟随一个 Django 反向外键,然后跟随另一个反向外键?

标签 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()

我有一个名为 aMyModelA 实例。我想计算这个查询集:

MyModelC.objects.filter(my_b__my_a=a).latest("created_ts")

但是,我需要在 a 的方法中计算此查询集。由于 MyModelA 不导入 MyModelC,因此我无法直接执行此操作。我需要点击反向链接。但是我怎样才能点击反向链接两次才能得到我需要的东西呢?

最佳答案

在您的 mymodela/models.py 中(顺便说一句,我不确定为什么您将所有模型分成这样的单独目录 - 除非这是故意的,否则您可能会考虑将它们全部放入在您应用的 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")

现在,当您有一些名为 aMyModelA 实例时,您可以调用 a.get_latest_c() 来获取最新的相关 MyModelC 对象。

关于python - 我怎样才能跟随一个 Django 反向外键,然后跟随另一个反向外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32879139/

相关文章:

python - Django Rest Framework中的AuthToken : non_field_errors

python - 如何防止打印值时出现空格

django - 多语言 django cms 站点 : seo friendlier home pages (redirects)

django - 如何让 Django 在不同的 URL 上使用相同的 session ?

python - Django中使用多表继承时是否可以直接设置隐式OneToOne键?

python - 将文本拆分成段落 NLTK - nltk.tokenize.texttiling 的用法?

python - 使用 QPixmap 加载图像

python - Django oauth2 request.user 返回 AnonymousUser

python - Django 获取列表中每个值的最后一个对象

django - 对如何使 Django 模型字段可选感到困惑