J'ai une poignée d'enregistrements que je voudrais trier en fonction d'une valeur calculée. J'ai la réponse ici ... comme ça:
sorted(Profile.objects.all(), key=lambda p: p.reputation)
sur une classe de profil comme celle-ci:
class Profile(models.Model):
...
@property
def reputation(self):
...
Malheureusement, la vue générique attend un objet ensemble de requêtes et génère une erreur si je lui donne une liste.
Existe-t-il un moyen de le faire qui renvoie un ensemble de requêtes
ou...
Puis-je convertir une liste en un ensemble de requêtes d'une manière ou d'une autre? Je n'ai rien trouvé de tel dans les documents Django.
J'espère ne pas dénormaliser les données, mais je suppose que je le ferai si je le dois.
il semble que la seule façon de récupérer un ensemble de requêtes est de récupérer toute votre logique dans les requêtes SQL.
Lorsque cela n'est pas possible, (je pense), vous devez dénormaliser les données
Il est inutile de reconvertir une liste de données en requête. Un objet de requête ne contient jamais de données; il représente simplement une requête vers la base de données. Il faudrait tout récupérer à nouveau si vous faites votre liste dans une requête, ce qui serait redondant et très mauvais en termes de performances.
Ce que tu peux faire:
reputation
est calculé; il est probablement possible de commander les données dans la base de données d'une manière ou d'une autre.Ok ... ce message est maintenant ancien MAIS ce que vous pourriez faire est d'obtenir tous les ids
des objets dans votre liste, puis effectuez une model.objects.filter(pk__in=list_of_ids)