我试图理解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
所以,我相当(愚蠢)的问题是(或者我完全错了!),理想情况下业务逻辑应该在哪里:
-
def get_context_data
-
def get_queryset
谢谢你的时间 .
1 回答
这个主观问题的最佳答案可能是:它取决于 .
我处理这种情况的个人算法如下:
如果您需要向将传递给模板的上下文添加内容,那么您实际上没有选择,因为在 get_queryset 方法中,您只能修改ListView的查询集 . 所以我在这种情况下使用get_context_data .
但是如果你要执行一些动态的查询集修改,假设你的视图可以在类似的模型类上运行,而实际的类是由传递给视图的参数决定的,那么你可能需要覆盖 get_queryset 方法 .
希望我能给你一些关于这个主题的见解:)