错误' QuerySet'对象没有属性'订阅者'

时间:2015-09-16 10:18:19

标签: python django django-orm

我在名为Book:

的模型上有一个GenericRelation
subscribers = GenericRelation(Subscriber)

因此,如果我想查找一本书的所有订阅者,我会这样做:

self.subscribers.all()

然而,当我尝试在书籍的查询集上做同样的事情时:

subscribers = queryset.subscribers.all()

我收到错误:

'QuerySet' object has no attribute 'subscribers'

为什么呢?可以这样做吗?

2 个答案:

答案 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()来过滤重复项。