2010-09-06 3 views
1

J'ai une requête personnalisée qui renvoie éventuellement une liste d'objets. J'ai besoin de la fonction pour retourner les objets réels, mais je ne veux pas frapper la base de données deux fois pour chaque requête, car c'est déjà une requête coûteuse. Comment puis-je retourner une instance de modèle sans toucher le db? NB: Je suppose que faire quelque chose comme ce qui suit va réellement créer une nouvelle instance d'un modèle différent?Renvoyer un modèle à partir d'une requête personnalisée sans appuyer sur la base de données

return [Object(pk=row[0]) for row in results] 

NB: Je présume que cela va frapper la base de données, le retour de la fonction

return [Object.objects.get(pk=row[0]) for row in results] 
+0

Pourquoi ne pouvez-vous pas retourner un jeu de requête? –

+0

@lazerscience: Je suis persuadé qu'il trouve le SQL trop compliqué/impossible à dupliquer en utilisant l'API de Django. –

+0

@lazerscience: ouais, c'est comme le dit Manoj, le SQL ne peut tout simplement pas être fait en utilisant django ORM. merci – Duncan

Répondre

2

Si vous avez Django 1.2+ vous pouvez utiliser la méthode raw() pour retourner la liste des Model cas en utilisant les résultats d'une requête personnalisée. Quelque chose comme ceci dans votre cas:

query = "<your query goes here>" 
Object.objects.raw(query) 
+0

Oh génial. Je viens de passer à 1.2 et doit avoir manqué cela dans les notes de version! – Duncan

Questions connexes