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