давайте предположим, что у меня есть модель django, подобная этой:
class Event(CommonSettings) :
author = models.ForeignKey(User)
timestamp = models.DateTimeField(auto_now_add=True)
event_type = models.ForeignKey(Event_Type, verbose_name="Event type")
text_field = models.TextField()
flag_box = models.BooleanField()
time = models.TimeField()
date = models.DateField()
project = models.ForeignKey(Project)
Теперь, по умолчанию, у меня есть представление, где я сортирую все события по времени и дате:
event_list = Event.objects.filter().order_by('-date', '-time')
однако, возможно, пользователь хочет отсортировать события только по времени, или по дате, или, возможно, в порядке возрастания, а не по убыванию.Я знаю, что могу создать шаблоны urlpattern, которые соответствуют всем этим случаям, и затем передать эти параметры на мой взгляд, однако я чувствую, что заново изобретаю колесо здесь.Административный сайт django может делать все это из коробки.
Итак, вот мой вопрос: есть ли умный, простой способ сделать это общим способом, или мне нужно жестко написать это длямои модели / виды / шаблоны?
и да, я нашел такие решения (https://gist.github.com/386835), но это означает, что вы используете три разных проекта для достижения одной цели - это кажется слишком сложным решением для такойпростая вещь.
EDIT1: как мне изменить шаблон, чтобы я мог комбинировать несколько фильтров? Сейчас у меня есть
<a href="?sort=desc">Desc</a>
<a href="?sort=asc">Asc</a>
, но я хочуПозвольте пользователю также изменить количество отображаемых записей. Таким образом, у меня есть:
<a href="?order_by=date">order by date</a>
<a href="?order_by=name">order by name</a>
Это прекрасно работает, но если я нажимаю «упорядочить по дате», а затем нажимаю «Asc»,тогда мой ранее выбранный заказ исчезает. Это не то, что я хочу. Я хочу, чтобы пользователь мог комбинировать некоторые параметры, но не другие.
EDIT2: к сожалению, ваше решение не работает с
from django.views.generic.list_detail import object_list
and
paginate_by
.
Я пытался:
<a href="?sort={{sort_dir}}?page={{ page_obj.previous_page_number }}" class="prev">prev</a>
<a href="?sort={{sort_dir}}?page={{ page_obj.next_page_number }}" class="next">{% trans "next" %}</a>
, но тогда ссылки просто не работают (ничего не происходит).может быть, вам нужно сделать что-то особенное с "object_list"?