Вопрос

У меня есть модели Django, представляющие собой списки элементов, и я хочу, чтобы элементы в каждом списке имели отдельный порядок сортировки.Возможно, список 1 будет сортировать позиции по названию, список 2 — по дате, а список 3 — по приоритету.

Модели выглядят примерно так:

class ListItem(models.Model):
    priority = models.IntegerField(choices=PRIORITY_CHOICES)
    name = models.CharField(max_length=240)
    due_date = models.DateTimeField(null=True, blank=True)
    list = models.ForeignKey(List)

Прямо сейчас я использую этот запрос, на мой взгляд:

lists = List.objects.filter(user=request.user)
return render_to_response('showlists.html', {'lists': lists })

Я читал примеры, которые подразумевают, что я мог бы сделать что-то вроде этого:

lists = List.objects.filter(user=request.user).select_related().order_by("items.name")

Если это сработает, я получу коллекцию списков с одинаковым порядком сортировки для каждой партии элементов.Как мне по-разному сортировать связанные элементы каждого отдельного списка?

Это было полезно?

Решение

Синтаксис упорядочивания связанных моделей аналогичен формату двойного подчеркивания, что и для filter, поэтому вы можете сделать:

List.objects.filter(user=request.user).select_related().order_by("listitems__name")

Вы должны просто иметь возможность использовать разные поля одинаково в order_by вызов.

Другие советы

Если списки небольшие, то вы можете сделай это на питоне, используя сортировку и тегирование

list = <...code to get sublist here ...>
list.sort(key=lambda x: x.due_date) #sort by due date, say

В противном случае запустите запрос для каждого подсписка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top