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

290

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

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

Я просто хочу отфильтровать по убыванию все Зарезервированные по дате check_in.

gadss
источник

Ответы:

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

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

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

Кит
источник
models.somModalName.all (). order_b ('- дата / время')
Shedrack
1
-перед именем столбца подразумевается нисходящий порядок без значительного -возрастания.
CallMarl
69
Reserved.objects.filter(client=client_id).order_by('-check_in')

Дефис «-» перед «check_in» указывает на нисходящий порядок. Восходящий порядок подразумевается.

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

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

Leonardo.Z
источник
3
Более чистый, чем принятый ответ, нет причин иметь .all (). Filter (xxx).
Люк Дюпен
19

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

Reserved.objects.filter(client=client_id).order_by('check_in').reverse()
Патрик
источник
4
Можно, но я сильно подозреваю, что было бы более эффективно позволить SQL-серверу обрабатывать порядок, по крайней мере, в теории. Это красиво и понятно, хотя.
Майкл Шепер,
1
@MichaelScheper да, это точно. Также .all().filter()не нужно. .filter()в одиночку это хорошо.
Сэм Кример
14

по возрастанию:

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]
anjaneyulubatta505
источник
1
Зачем кому-то захотеть использовать второй метод?
MichaelR
Это один из доступных вариантов. Но лучшим подходом является использование 1-го метода.
anjaneyulubatta505
12

Это работает, удаляя .all():

Reserved.objects.filter(client=client_id).order_by('-check_in')
Павел Нгуен
источник
3
Это по сути идентично ответу @ leonardo-z, не так ли?
Майкл Шепер
7

Добавление - упорядочит его в порядке убывания. Вы также можете установить это, добавив порядок по умолчанию к мета вашей модели. Это будет означать, что когда вы делаете запрос, вы просто делаете MyModel.objects.all (), и он будет появляться в правильном порядке.

class MyModel(models.Model):

    check_in = models.DateField()

    class Meta:
        ordering = ('-check_in',)
Томас Тернер
источник
3
  1. По возрастанию

    Reserved.objects.all().filter(client=client_id).order_by('check_in')
  2. В порядке убывания

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

- (дефис) используется для указания здесь в порядке убывания.

Вишваджит Патхак
источник
1

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

latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]
Маниш Гупта
источник
-1

67

Reserved.objects.filter (клиент = client_id) .order_by ( '- check_in')

'-' указывает на нисходящий порядок, а для восходящего - просто укажите атрибут класса

user13061886
источник
1
Пожалуйста, дайте больше контекста для ваших вопросов
Иман
Привет, добро пожаловать в StackOverflow, пожалуйста, просмотрите ваш ответ, отформатируйте его правильно, объясните его (что это за "67" сверху ???); Вы можете обратиться к stackoverflow.com/help/how-to-answer, чтобы узнать, как написать «хороший» ответ
Пьер