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.

gadss
la source

Réponses:

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

Remarquez l' -avant check_in.

Documentation Django

Keith
la source
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

Leonardo.Z
la source
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()
Patrick
la source
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]
anjaneyulubatta505
la source
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')
PaVen Nguyen
la source
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',)
Thomas Turner
la source
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.

Vishvajit Pathak
la source
1

Cela fonctionne pour moi.

latestsetuplist = SetupTemplate.objects.order_by('-creationTime')[:10][::1]
Manish Gupta
la source
-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

user13061886
la source
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