mam taki model książce:Django: ManyToMany filtr na dopasowanie wszystkich elementów listy
class Book(models.Model):
authors = models.ManyToManyField(Author, ...)
...
W skrócie:
Chciałbym odzyskać książki, których autorami są ściśle równa podany zestaw autorów. Nie jestem pewien, czy istnieje jedno zapytanie, które to robi, ale wszelkie sugestie będą pomocne.
W długi:
Oto, co starałem (które udało się uruchomić coraz 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
... i oto co mam:
AttributeError: 'NoneType' object has no attribute '_meta'
Generalnie, jak powinienem zapytać model z ograniczeniem, że jego pole ManyToMany zawiera zbiór podanych obiektów, tak jak w moim przypadku?
ps: Znalazłem kilka istotnych pytań dotyczących SO, ale nie mogłem uzyskać jednoznacznej odpowiedzi. Pomocny będzie również każdy dobry wskaźnik. Dzięki.
Prawie tam. Zobacz odpowiedź na to pytanie: http://stackoverflow.com/questions/8618068/django-filter-queryset-in-for-every-item-in-list –