2017-03-09 102 views
2

私はクラスベースのビューでListViewを使用していますが、モデルオブジェクトセットをテンプレートで並べ替えて表示する方法があるのだろうかと思いました。これは私がこれまで持っているものです。Djangoリストビューのモデルソートはありますか?

マイビュー:

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

date_createdフィールドを持っていProductReviewモデル。私は降順で日付をソートしたいと思います。どうすればこれを達成できますか?

答えて

9

ビューの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.GET.get('ordering', '-date_created') 
     # validate ordering here 
     return ordering 

固定日付フィールドを常にソートする場合は、ArchiveIndexViewに興味があります。あなたはTrueallow_futureを設定しない限り、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" 

は注意してください。それはトリックを行いますが、テンプレートは、見出しをクリックすると、列をソートすることができますテーブルを持っている、

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') 
+0

私はArchiveIndexViewが好き: – DeA

+0

他のフィールドでソートしている場合は、アーカイブインデックスビューが適切でないように見えます。 – Alasdair

0

は、なぜこのような get_querysetメソッドをオーバーライドしません。私がそれをすると、これはうまくいかない、どうやってそれを働かせることができるか知っていますか?
+0

これを試してみますが、あなたのメソッドにはdefがありません – DeA

+0

これはレンダリングまたは実行中にエラーが発生しませんでしたが、order_byは機能しませんでした。 – DeA

+1

@DeA 'list_view'では、代わりに' ordering'や 'get_ordering'をオーバーライドしたいかもしれませんが、' get_queryset'をオーバーライドして 'order_by'を使うとうまくいくはずです。 – Alasdair

関連する問題