Estoy usando ListView en mis vistas basadas en clases y me preguntaba si había alguna manera de mostrar el conjunto de objetos modelo en la plantilla ordenándolo. Esto es lo que tengo hasta ahora:
Mis puntos de vista:
class Reviews(ListView): model = ProductReview paginate_by = 50 template_name = 'review_system/reviews.html' El modelo ProductReview tiene un campo date_created . Me gustaría ordenar la fecha en orden descendente. ¿Cómo puedo conseguir esto?
Establezca el atributo de ordering para la vista.
class Reviews(ListView): model = ProductReview paginate_by = 50 template_name = 'review_system/reviews.html' ordering = ['-date_created'] Si necesita cambiar el orden de forma dinámica, puede usar get_ordering en su lugar.
class Reviews(ListView): ... def get_ordering(self): ordering = self.request.GET.get('ordering', '-date_created') # validate ordering here return ordering Si siempre está ordenando un campo de fecha fija, es posible que le interese 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" Tenga en cuenta que ArchiveIndexView no mostrará objetos con una fecha en el futuro a menos que establezca allow_future en True .
¿Por qué no anulas el método get_queryset de esta manera?
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')