我在基于类的视图中使用ListView
,我想知道是否有办法通过对模板进行排序来显示模板上的模型对象集。这就是我到目前为止所做的:
我的观点:
class Reviews(ListView):
model = ProductReview
paginate_by = 50
template_name = 'review_system/reviews.html'
模型ProductReview
有一个date_created
字段。我想按降序排列日期。我怎样才能做到这一点?
答案 0 :(得分:28)
为视图设置ordering
属性。
class Reviews(ListView):
model = ProductReview
paginate_by = 50
template_name = 'review_system/reviews.html'
ordering = ['-date_created']
如果您需要动态更改排序,可以改用get_ordering
。
class Reviews(ListView):
...
def get_ordering(self):
ordering = self.request.GET.get('ordering', '-date_created')
# validate ordering here
return ordering
如果您总是对固定日期字段进行排序,您可能会对ArchiveIndexView
感兴趣。
from django.views.generic.dates import ArchiveIndexView
class Reviews(ArchiveIndexView):
model = ProductReview
paginate_by = 50
template_name = 'review_system/reviews.html'
date_field = "date_created"
请注意,除非您将ArchiveIndexView
设置为allow_future
,否则True
不会显示具有日期的对象。
答案 1 :(得分:4)
为什么不像这样覆盖get_queryset
方法:
class Reviews(ListView):
model = ProductReview
paginate_by = 50
template_name = 'review_system/reviews.html'
def get_queryset(self):
return YourModel.objects.order_by('model_field_here')