j'ai un tel modèle du livre:Django: mise en correspondance de filtre ManyToMany sur tous les articles dans une liste
class Book(models.Model):
authors = models.ManyToManyField(Author, ...)
...
En bref:
Je voudrais récupérer les livres dont les auteurs sont strictement égale à un ensemble donné d'auteurs. Je ne suis pas sûr si une seule requête le fait, mais toutes les suggestions seront utiles.
En longue:
Voici ce que j'ai essayé, (qui a échoué à courir obtenir un AttributeError)
# A sample set of authors
target_authors = set((author_1, author_2))
# To reduce the search space,
# first retrieve those books with just 2 authors.
candidate_books = Book.objects.annotate(c=Count('authors')).filter(c=len(target_authors))
final_books = QuerySet()
for author in target_authors:
temp_books = candidate_books.filter(authors__in=[author])
final_books = final_books and temp_books
... et voici ce que je suis:
AttributeError: 'NoneType' object has no attribute '_meta'
En général, comment dois-je interroger un modèle avec la contrainte que son champ ManyToMany contient un ensemble d'objets donnés comme dans mon cas? Ps: J'ai trouvé des questions SO pertinentes mais je n'ai pas pu obtenir de réponse claire. Tout bon pointeur sera utile aussi. Merci.
Presque là. Voir la réponse dans cette question: http://stackoverflow.com/questions/8618068/django-filter-queryset-in-for-every-item-in-list –