在listview类方法中包含业务逻辑的位置

时间:2013-02-14 19:19:55

标签: django django-views django-class-based-views

我试图理解Django基于类的视图(非常新的),特别是ListView。我很难理解“业务逻辑应该去哪里”。比方说,我有以下课程:

#views.py
class DisplayListView(ListView):
    model = Cars
    template_name = "searchres_list.html"
    paginate_by = '5'
    context_object_name = "titles"

def get_context_data(self, **kwargs):
    context = super(SearchDisplayListView, self).get_context_data(**kwargs)
            # custom logic whoch spits out "now". in this example [1 -->10]
    context['now'] = [1,2,3,4,5,6,7,8,9,10]
    return context

它工作正常,我能够看到[1 - > 10]在我的模板上。但是,当我查看ListView下的可用方法时,我发现我可能在get_queryset方法中包含了我的逻辑。所以,像:

def get_queryset(self):
    # Fetch the queryset from the parent get_queryset
    queryset = super(SearchDisplayListView, self).get_queryset()
             # custom logic whoch spits out "now". in this example [1 -->10]
    queryset = [1,2,3,4,5,6,7,8,9,10]
            return queryset

所以,我相当(愚蠢)的问题是(或者我完全错了!),理想情况下应该在哪里进行业务逻辑:

  1. def get_context_data
  2. def get_queryset
  3. 感谢您的时间。

1 个答案:

答案 0 :(得分:2)

这个主观问题的最佳答案可能是:它取决于。

我处理这种情况的个人算法如下:

  • 如果您需要向将传递给模板的上下文添加内容,那么您实际上没有选择,因为在 get_queryset 方法中您可以只修改ListView的查询集。所以我在这种情况下使用get_context_data。
  • 但是如果您要执行一些动态查询集修改,假设您的视图可以在类似的模型类上运行,而实际的类是由传递给视图的参数决定的,那么可能是你需要覆盖 get_queryset 方法。

希望我能给你一些关于这个主题的见解:)