набор запросов django order_by, по возрастанию и по убыванию

140

Как я могу заказать, по убыванию моего набора запросов в django по дате?

Reserved.objects.all().filter(client=client_id).order_by('check_in')

Я просто хочу отфильтровать из нисходящего списка всех зарезервированных по дате check_in.

Теги:
sorting

6 ответов

262
Лучший ответ
Reserved.objects.filter(client=client_id).order_by('-check_in')

Обратите внимание на - до check_in.

Документация Django

44
Reserved.objects.filter(client=client_id).order_by('-check_in')

Дефис "-" перед "check_in" указывает на убывающий порядок. Подразумевается возрастающий порядок.

Нам не нужно добавлять все() перед фильтром(). Это все равно будет работать, но вам нужно всего лишь добавить all(), когда вы хотите, чтобы все объекты из корневого QuerySet.

Подробнее об этом здесь: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters

  • 1
    Более чистый, чем принятый ответ, нет причин иметь .all (). Filter (xxx).
9

Выполняется удаление .all():

Reserved.objects.filter(client=client_id).order_by('-check_in')
  • 3
    Это по сути идентично ответу @ leonardo-z, не так ли?
8

для возрастания:

Reserved.objects.filter(client=client_id).order_by('check_in')

в порядке убывания:

1.  Reserved.objects.filter(client=client_id).order_by('-check_in')

или

2.  Reserved.objects.filter(client=client_id).order_by('check_in')[::-1]
  • 0
    Зачем кому-то захотеть использовать 2-й метод?
  • 0
    Это один из доступных вариантов. Но лучшим подходом является использование 1-го метода.
8

Вы также можете использовать следующую команду:

Reserved.objects.all().filter(client=client_id).order_by('check_in').reverse()
  • 3
    Можно, но я сильно подозреваю, что было бы более эффективно позволить SQL-серверу обрабатывать порядок, по крайней мере, теоретически. Это красиво и понятно, хотя.
0

Это работает для меня.

latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню