我在名为Book:
的模型上有一个GenericRelation
subscribers = GenericRelation(Subscriber)
因此,如果我想查找一本书的所有订阅者,我会这样做:
self.subscribers.all()
然而,当我尝试在书籍的查询集上做同样的事情时:
subscribers = queryset.subscribers.all()
我收到错误:
'QuerySet' object has no attribute 'subscribers'
为什么呢?可以这样做吗?
答案 0 :(得分:2)
subscribers
关系在模型上,而不在查询集上。您可以遍历查询集,并获取每个单独实例的订阅者。
for book in queryset:
subscribers = book.subscribers.all()
如果要获取已订阅查询集中任何图书的所有订阅者,则需要设置related_query_name
(注意,这仅适用于Django 1.7 +)。
class Book(models.Model):
subscribers = GenericRelation(Subscriber, related_query_name=books)
然后,您可以使用以下命令获取查询集的订阅者:
subscribers = Subscriber.objects.filter(books__in=queryset)
有关详细信息,请参阅reverse generic relations上的文档。
答案 1 :(得分:2)
订阅者仅适用于每本书。如果您想获得(查询)图书集的所有订阅者,您需要使用以下查询来检索它们:
Subscriber.objects.filter(book__in=queryset)
您可能需要添加.distinct()
来过滤重复项。