错误 'QuerySet' 对象没有属性 'subscribers'

Error 'QuerySet' object has no attribute 'subscribers'

我有一个 GenericRelation 在一个名为 Book 的模型上:

subscribers = GenericRelation(Subscriber)

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

self.subscribers.all()

但是,当我尝试对图书查询集执行相同操作时:

subscribers = queryset.subscribers.all()

我收到错误:

'QuerySet' object has no attribute 'subscribers'

为什么?这能做到吗?

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 上的文档。

订阅者只能以每本书为基础。如果你想获得一组(查询)书籍的所有可能订阅者,你需要使用如下查询检索它们:

Subscriber.objects.filter(book__in=queryset)

您可能想要添加 .distinct() 以过滤掉重复项。