使用基于类的视图查询多个模型

时间:2012-10-18 14:53:27

标签: django django-class-based-views

我想解决以下问题。

我有一个侧面板,其中包含活动用户的信息。为此,需要将UserInfo模型的实例传递给视图。

此外,我想将许多其他模型实例传递给页面(例如,购买,收藏夹等)。

我知道通过覆盖get_context_data很容易做到。

def get_context_data(self, **kwargs):
    kwargs['purchases'] = Purchases.objects.get(id=1)
    kwargs['favourites'] = Favourites.objects.get(id=1)
    .... etc
    return super(UploadFileView, self).get_context_data(**kwargs)

所以我的问题是 - 用于此目的的最佳/最合适的CBV是什么?

2 个答案:

答案 0 :(得分:6)

这不是DetailView因为你有多个对象,但它也不是ListView,也不像FormView或它的孩子。

由于你从中获得了什么,一个简单的TemplateView可能就是你想要的。

答案 1 :(得分:2)

如果您在多个视图中查询相同的UserInfo,Purchases,Favorites等,请创建一个可以重复使用的Mixin。

class CommonUserInfoMixin (object):
    def get_context_data(self, **kwargs):
        context = super(OrgContextMixin, self).get_context_data(**kwargs)
        ... # Add more to context object

然后你可以在普通的List,Detail,Update等CBV中使用它

class ItemList(CommonUserInfoMixin, ListView):
    ....