【问题标题】:Query multiple models with class-based views使用基于类的视图查询多个模型
【发布时间】:2012-10-09 01:57:52
【问题描述】:

我想解决以下情况。

我有一个包含活动用户信息的侧面板。为此,需要将 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 是什么?

【问题讨论】:

    标签: django django-class-based-views


    【解决方案1】:

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

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

    然后你可以在你的普通列表、详细信息、更新等 CBV 中使用它

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

    【讨论】:

      【解决方案2】:

      这不完全是DetailView,因为您有多个对象,但它也不是ListView,也不像FormView 或其子对象。

      由于您没有从中获得任何好处,因此简单的TemplateView 可能是要走的路。

      【讨论】:

      • 我同意。谢谢 - 我想检查一下我的想法,因为我是 CBV 的新转换者,所以现在要检查和重构我最常用的功能,并且必须做出一些决定。
      猜你喜欢
      • 2017-08-13
      • 2020-08-09
      • 2017-10-18
      • 2014-01-18
      • 2018-11-25
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多