Набір запиту django order_by, зростаючий та низхідний


287

Як я можу замовити, зменшивши свій запит, встановлений у django за датою?

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

Я просто хочу відфільтрувати від зменшення всіх зарезервованих до дати перевірки.

Відповіді:


550
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 (). Це все ще спрацює, але вам потрібно додати всі () лише тоді, коли ви хочете, щоб усі об'єкти з кореневого 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

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

67

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

'-' вказує на низхідний порядок, а для порядку зростання - лише атрибут класу


1
Будь ласка, дайте більше контексту для ваших питань
iman

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