是否有Django List View模型排序?

时间:2017-03-09 14:42:05

标签: python django

我在基于类的视图中使用ListView,我想知道是否有办法通过对模板进行排序来显示模板上的模型对象集。这就是我到目前为止所做的:

我的观点:

class Reviews(ListView):
    model = ProductReview
    paginate_by = 50
    template_name = 'review_system/reviews.html'

模型ProductReview有一个date_created字段。我想按降序排列日期。我怎样才能做到这一点?

2 个答案:

答案 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')