是否有Django List View模型排序?

DeA*_*DeA 11 python django

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

我的观点:

class Reviews(ListView):
    model = ProductReview
    paginate_by = 50
    template_name = 'review_system/reviews.html'
Run Code Online (Sandbox Code Playgroud)

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

Ala*_*air 33

设置ordering视图的属性.

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

    ordering = ['-date_created']
Run Code Online (Sandbox Code Playgroud)

如果您需要动态更改排序,则可以get_ordering改为使用.

class Reviews(ListView):
    ...
    def get_ordering(self):
        ordering = self.request.GET.get('ordering', '-date_created')
        # validate ordering here
        return ordering
Run Code Online (Sandbox Code Playgroud)

如果您总是对固定日期字段进行排序,您可能会对此感兴趣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"
Run Code Online (Sandbox Code Playgroud)

请注意,ArchiveIndexView除非您设置allow_future为,否则将来不会显示具有日期的对象True.


nik*_*k_m 6

为什么不重写这样的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')
Run Code Online (Sandbox Code Playgroud)