Django:获取相关对象的相关对象并传递给模板

时间:2017-10-17 16:37:41

标签: django orm model foreign-keys django-queryset

在Django应用程序中,我有三个模型:

class A(models.Model):
     aId =  models.AutoField(primary_key=True)

class B(models.Model):
    bId = models.AutoField(primary_key=True)
    aId = models.ForeignKey(A)

class C(models.Model):
    cId =  models.AutoField(primary_key=True)
    bId = models.ForeignKey(B)

A和B之间存在多对多关系,因为B和C之间存在关系。 还有一个带context_data的View类。在模板中,我需要用C来显示和过滤Bs。 如何将与这些B相关的A和所有C相关的所有B传递给我的模板(上下文)? 我试图在两个阵列中分别得到Bs和Cs,但似乎不是一个好主意,因为我不能用Bs对Cs进行分类。

2 个答案:

答案 0 :(得分:3)

假设您有一个名为A的{​​{1}}实例。

a

对元素的迭代可能在模板本身中完成。

为了避免多次查询,您可以prefetch related objects

答案 1 :(得分:1)

所以这将是您的视图的代码。我不确定在args / kwargs中给出了哪些对象。

from django.views.generic import TemplateView

class YourView(TemplateView):
    template_name = 'yourtemplate.html'

    def get_context_data(self, **kwargs):
        a = kwargs.get('a')
        b = kwargs.get('b')
        ctx = super().get_context_data(**kwargs)

        ctx['all b related to a'] = a.b_set.all()
        ctx['all c related to b'] = b.c_set.all()
        return ctx

如果你必须组合查询集,比如每个b的多个查询集为@s_puria建议,你可以使用UNION运算符https://docs.djangoproject.com/en/1.11/ref/models/querysets/#union