书签模型:
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
答案 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()