如何解决“'QuerySet'对象没有属性'posts'“

时间:2019-04-25 16:19:47

标签: python django

书签模型:

class Bookmark(models.Model):
    user = models.ForeignKey(User, related_name='users', on_delete=models.CASCADE)
    post = models.ForeignKey(Post, related_name='posts', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        app_label = 'content'
        verbose_name_plural = _('Bookmarks')
        unique_together = [['user', 'post']]

我希望查询返回用户加了书签的帖子,

我尝试了这个Bookmark.objects.filter(user_id=user.id).order_by('-created_at').posts(),它返回了此错误:

AttributeError: 'QuerySet' object has no attribute 'posts'

更新:

Bookmark.objects.filter()返回一个查询集。就像错误提示一样,它没有posts属性。

但是,您可以采用其他方式进行处理。由于要查找Post对象,因此查询Post模型而不是Bookmark模型。

Post.objects.filter(bookmarks__user = user)

有关更多详细信息,请参见此处:

https://docs.djangoproject.com/en/2.2/topics/db/queries/#lookups-that-span-relationships

2 个答案:

答案 0 :(得分:0)

Bookmark.objects.filter(user_id=user.id).order_by('-created_at').posts()

将返回QuerySet,这是一个列表。为了访问该列表中的对象,您可以获取返回列表的第一个元素:

Bookmark.objects.filter(user_id=user.id).order_by('-created_at')[0].posts()

或使用get()(而不是filter()):

Bookmark.objects.get(user_id=user.id).order_by('-created_at').posts()

答案 1 :(得分:0)

我认为您正在寻找Bookmark中的“ post”字段。您将获得一个QuerySet,它返回一个对象列表,请尝试使用for语句

href

查询结果没有属性posts()