Je voudrais trouver comment sélectionner tous les objets dont le champ ManyToMany contient un autre objet. Je les modèles suivants (dépouillées vers le bas)Requête de base de données à travers django ManyToManyField
class Category(models.Model):
pass
class Picture(models.Model):
categories = models.ManyToManyField(Category)
visible = models.BooleanField()
je besoin d'une fonction pour sélectionner toutes les images dans une ou plusieurs catégories:
def pics_in_cats(cat_ids=()):
pass
mais il a besoin de retourner un QuerySet si possible pour que je peut faire quelque chose comme:
pics_in_cats((1,2,3)).filter(visible=True)
cela pourrait se faire en chargeant tous les objets pertinents Catégorie et la fusion de leurs attributs de picture_set, mais cela semble inefficace. Je voudrais également éviter de retomber dans le SQL brut si possible.
Merci à l'avance
qui fonctionne - mais je ne sais pas pourquoi :) Est-ce dire « où une clé primaire de la catégorie correspond à l'un 1,2,3 »? Et puis-je dire filter (categories__name__in = ['foo', 'bar']) par exemple pour obtenir toutes les images dans les catégories avec le nom foo ou bar? –
c'est correct. Pour voir toutes les possibilités que vous avez dans les requêtes de construction Django, regardez ici: http://docs.djangoproject.com/fr/dev/topics/db/queries/ – schneck