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


290

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

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

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

Ответы:


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


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]

1
Зачем кому-то захотеть использовать второй метод?
MichaelR

Это один из доступных вариантов. Но лучшим подходом является использование 1-го метода.
anjaneyulubatta505


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

67

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

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


1
Пожалуйста, дайте больше контекста для ваших вопросов
Иман

Привет, добро пожаловать в StackOverflow, пожалуйста, просмотрите ваш ответ, отформатируйте его правильно, объясните его (что это за "67" сверху ???); Вы можете обратиться к stackoverflow.com/help/how-to-answer, чтобы узнать, как написать «хороший» ответ
Пьер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.