Je ne suis même pas sûr d'avoir correctement répondu à la question. Voici la situation. J'ai un jeu de requêtes généré en accédant à la relation de clé étrangère. En utilisant les modèles standard Blog/Entrée dans la documentation de Django, disons que j'ai choisi un blog et maintenant un ensemble d'entrées:Interroger un queryset Django sans créer un nouveau jeu de requête?
entries = Blog.objects.get(id=1).entry_set.all()
Nous avons donc des entrées pour le blog, peut-être zéro. Je voudrais alors dire construire un calendrier et indiquer quels jours ont des entrées de blog. Donc, ma pensée est d'itérer sur la liste des jours dans le mois ou quoi que ce soit, et vérifier les entrées queryset pour une entrée avec cette date. La question est, quelle est la meilleure façon de faire cela? Ma première pensée était de faire quelque chose comme
dayinfo = [] # we will iterate over this in the template
for curday in month:
dayinfo.append({'day':curday, 'entry':entries.filter(day=curday)})
Le problème est que l'appel de filtre retourne une nouvelle queryset, et qui génère un nouvel appel SQL pour chaque itération de la boucle. J'ai juste besoin d'arracher l'objet d'entrée des entrées s'il existe et de le coller dans mon calendrier. Alors, quelle est la meilleure façon de faire cela? Je l'ai fait fonctionner:
dayinfo.append({'day':day, 'entry':[e for e in entries if e.day == curday][0]})
Cela ne génère pas de nouveaux appels SQL. Mais c'est sûr que c'est moche.
Merci, c'était ce dont j'avais besoin. Il s'agissait plus d'un problème de codage générique que d'un problème de Django. Je savais qu'il y avait une façon plus simple de faire ce que j'essayais de faire! – chacmool