Django personnalisé order_by
J'ai un modèle, par exemple. Voiture avec une clé étrangère par exemple. Le propriétaire, qui peut ou ne peut pas être vide.
La Voiture a un creation_date.
J'aimerais commander ces voitures par jour, mais si la voiture a un propriétaire, la date de naissance du propriétaire doivent être prises au lieu de la creation_date de la voiture.
Est-ce possible?
OriginalL'auteur Arthur C | 2011-10-01
Vous devez vous connecter pour publier un commentaire.
Jetez un oeil à cette même question: De bons moyens pour trier un queryset? - Django
Vous ne pouvez pas utiliser le modèle de Méta
ordering
qu'il n'accepte qu'un seul champhttps://docs.djangoproject.com/en/dev/ref/models/options/#ordering
Vous ne pouvez pas utiliser la requête
order_by('creation_date', 'birthdate')
qu'il ne trie par date de naissance si elles ont le mêmecreation_date
Donc, vous pourriez écrire un custom manager intégrer un tri personnalisé pour vous.
alors maintenant, vous pouvez interroger:
pour obtenir tous un queryset de tri de la voiture
N'oubliez pas d'être cateful avec
list()
:list(). Force evaluation of a QuerySet by calling list() on it. Be warned, though, that this could have a large memory overhead, because Django will load each element of the list into memory. In contrast, iterating over a QuerySet will take advantage of your database to load data and instantiate objects only as you need them.
Django docOriginalL'auteur Timmy O'Mahony
Cela est possible par retomber SQL:
if
fonction est spécifique à MySQL. En cas de SQLite ou Postgresql, vous devez utilisercase
déclaration.OriginalL'auteur catavaran
Vous pourriez écrire une méthode qui retourne la date appropriée (si la voiture est propriétaire de retour d'anniversaire d'autre retour creation_date) et puis commandez votre modèle basé sur cette méthode.
OriginalL'auteur arie