在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进行分类。
答案 0 :(得分:3)
答案 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