我怎样才能跟随 Django 反向外键,然后是另一个反向外键?
How can I follow a Django reverse-foreign-key and then another reverse-foreign-key?
假设我有 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()
我有一个名为 a
的 MyModelA
实例。我想计算这个 QuerySet:
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")
现在,当您有一些 MyModelA
实例称为 a
时,您可以调用 a.get_latest_c()
来获取最近相关的 MyModelC
对象。
假设我有 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()
我有一个名为 a
的 MyModelA
实例。我想计算这个 QuerySet:
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")
现在,当您有一些 MyModelA
实例称为 a
时,您可以调用 a.get_latest_c()
来获取最近相关的 MyModelC
对象。