10
votes

Filtrer Django Query par l'enregistrement avec la valeur de colonne maximale


2 commentaires

Sa semble que sur Django, vous ne pouvez pas faire ce que vous recherchez à moins d'utiliser une requête crue SQL. Vérifiez Ce . Depuis au moment où vous ajoutez un ordre_by («créé») qui a été créé est ajouté à la sélection de la requête, le distinct ne fera rien.


Vous pouvez le faire avec Django orm, voir ma réponse: Stackoverflow.com/a/65898703/842572


3 Réponses :


5
votes

Vous voulez probablement simplement utiliser SQL brut ici, le RAW () Méthode Manager facilite cela, vous permettant de retourner des instances de modèle de votre requête. Le seul tour est que la requête brute doit inclure la clé primaire. Cela devrait probablement fonctionner pour vous (sauf si vous avez la clé primaire définie sur quelque chose d'autre que ID ): xxx


0 commentaires

1
votes

Si votre backend est postgreSQL Roman Pekar a donné une bonne réponse pour Ce question Question.


0 commentaires

1
votes

Mise à jour: Si vous utilisez PostgreSQL, vous pouvez utiliser l'ormes avec .Distinct () strong>

de Documentation PostgreSQL : P>

Sélectionner distinct sur (expression [ ...]) ne garde que la première rangée de chaque ensemble de lignes où les expressions données évaluent à égale. Les Des expressions distinctes sont interprétées en utilisant les mêmes règles que pour Commander par (voir ci-dessus). Notez que la "première ligne" de chaque ensemble est imprévisible sauf si la commande par est utilisée pour s'assurer que la ligne souhaitée apparaît d'abord. P> BlockQuote>

Utilisation de l'orme Django: P>

select distinct on (name)
    ...
from person_person
order by name, created desc


0 commentaires