django order_by ensemble de requêtes, croissant et décroissant


290

Comment puis-je commander en descendant mon ensemble de requêtes dans django par date?

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

Je veux juste filtrer de décroissant tous les Réservé par date check_in.

Réponses:


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

Remarquez l' -avant check_in.

Documentation Django


models.somModalName.all (). order_b ('- date / heure')
Shedrack

1
-avant le nom de la colonne signifie l'ordre décroissant sans -moyenne croissante.
CallMarl

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

Un tiret "-" devant "check_in" indique l'ordre décroissant. L'ordre croissant est implicite.

Nous n'avons pas besoin d'ajouter un all () avant filter (). Cela fonctionnerait toujours, mais vous n'avez besoin d'ajouter all () que lorsque vous voulez tous les objets du QuerySet racine.

Plus d'informations à ce sujet ici: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters


3
Plus propre que la réponse acceptée, aucune raison d'avoir le filtre .all (). (Xxx).
Luke Dupin

19

Vous pouvez également utiliser l'instruction suivante:

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

4
Vous pouvez, mais je soupçonne fortement qu'il serait plus efficace de laisser le serveur SQL gérer la commande, au moins en théorie. C'est agréable et clair, cependant.
Michael Scheper

1
@MichaelScheper oui, c'est sûr. En outre, .all().filter()n'est pas nécessaire. .filter()seul est bien.
Sam Creamer

14

pour ordre croissant:

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

pour l'ordre décroissant:

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

ou

2.  Reserved.objects.filter(client=client_id).order_by('check_in')[::-1]

1
Pourquoi voudrait-on jamais utiliser la 2e méthode?
MichaelR

C'est l'un des choix disponibles. Mais, la meilleure approche consiste à utiliser la 1ère méthode.
anjaneyulubatta505

12

Cela fonctionne en supprimant .all():

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

3
C'est essentiellement identique à la réponse de @ leonardo-z, n'est-ce pas?
Michael Scheper

7

L'ajout de - le classera par ordre décroissant. Vous pouvez également définir cela en ajoutant un ordre par défaut à la méta de votre modèle. Cela signifie que lorsque vous effectuez une requête, vous ne faites que MyModel.objects.all () et il apparaîtra dans le bon ordre.

class MyModel(models.Model):

    check_in = models.DateField()

    class Meta:
        ordering = ('-check_in',)

3
  1. Ordre croissant

    Reserved.objects.all().filter(client=client_id).order_by('check_in')
  2. Ordre décroissant

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

- (trait d'union) est utilisé pour indiquer l'ordre décroissant ici.


1

Cela fonctionne pour moi.

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

-1

67

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

'-' est indique l'ordre décroissant et pour l'ordre croissant donnez simplement l'attribut class


1
Veuillez donner plus de contexte à vos questions
iman

Salut, bienvenue sur StackOverflow, veuillez revoir votre réponse, formatez-la correctement, expliquez-la (quel est ce "67" en haut ???); vous pouvez vous référer à stackoverflow.com/help/how-to-answer pour savoir comment rédiger une "bonne" réponse
Pierre
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.