Select 第三个相关的对象 table
Select Objects related in third table
说我有模型
class A(models.Model):
class B(models.Model):
class C(models.model):
b = models.ForeignKey(B)
class D(models.Model):
c = models.ForeignKey(C)
a = models.ForeignKey(A)
ORM 查询对于 select 与 C 相关的所有 B(与特定 A 到 table D 相关)会是什么样子?
class C (models.Model):
b = models.ForeignKey(on_delete=models.CASCADE, related_name='c_related')
最终查询:
c_ids = D.objects.values_list(
'c__id', flat=True).filter(a__id="specific A object id palced here")
query = B.objects.filter(c_related__id__in=c_ids).distinct()
如您的 post 评论所述,您可以使用自动生成的 related name。不过自己设置也无妨。
class C(models.model):
b = models.ForeignKey(B, related_name="c")
class D(models.Model):
c = models.ForeignKey(C, related_name="d")
a = models.ForeignKey(A, related_name="d")
然后:
B.objects.filter(c__d__a=specific_a_obj).distinct()
说我有模型
class A(models.Model):
class B(models.Model):
class C(models.model):
b = models.ForeignKey(B)
class D(models.Model):
c = models.ForeignKey(C)
a = models.ForeignKey(A)
ORM 查询对于 select 与 C 相关的所有 B(与特定 A 到 table D 相关)会是什么样子?
class C (models.Model):
b = models.ForeignKey(on_delete=models.CASCADE, related_name='c_related')
最终查询:
c_ids = D.objects.values_list(
'c__id', flat=True).filter(a__id="specific A object id palced here")
query = B.objects.filter(c_related__id__in=c_ids).distinct()
如您的 post 评论所述,您可以使用自动生成的 related name。不过自己设置也无妨。
class C(models.model):
b = models.ForeignKey(B, related_name="c")
class D(models.Model):
c = models.ForeignKey(C, related_name="d")
a = models.ForeignKey(A, related_name="d")
然后:
B.objects.filter(c__d__a=specific_a_obj).distinct()