我正在构建一个博客应用程序,我试图获得所有的标签,其中用户评论和评论的博客是附加标签。
例如:-*如果一个blog_1有标签命名为tag_1
,tag_2
和tag_3
,并且用户在它和之前的任何这些博客文章中评论过。
models.py
class BlogPost(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
tags = TaggableManager()
title = models.CharField(max_length=30)
views.py
def page(request):
query = Tag.objects.filter(taggit_taggeditem_items__blogpost__user=request.user)
context = {'query':query}
return render(request, 'page.html', context)
但是它显示
无法查询"test_user";必须为"TaggedItem"实例。
Then i try
query = BlogPost.objects.filter(taggit_taggeditem_items__blogpost__user=request.user)
也显示了同样的错误。
任何帮助都将非常感激。谢谢你
我希望我能正确理解你想要达到的目的。您希望获得用户评论过的所有博客文章的标签。如果这是正确的,下面是我的想法:
我在下面定义了自己的模型来支持我的答案。对BlogPost
模型进行了一些调整,以包括作者字段而不是用户字段,并定义了一个Comment
模型,该模型具有关于评论的User
和他们评论的BlogPost
的信息。我假设您在问题中提到的用户是评论的用户,而不是编写BlogPost
的用户。
class BlogPost:
title = models.CharField(max_length=30)
author = models.ForeignKey(User, on_delete=models.CASCADE)
tags = TaggableManager()
class Comment:
user = models.ForeignKey(User, on_delete=models.CASCADE)
blog_post = models.ForeignKey(
BlogPost,
on_delete=models.CASCADE,
related_name="blog",
related_query_name="blog_comment")
comment_text = models.CharField(max_length=250)
在您的视图中,您现在可以使用related_query_name来查询特定User
的所有BlogPost
和Comment
s,并访问所有这些BlogPost
s的标签。
blog_post_tags = BlogPost.objects.filter(
blog_comment__user=request.user).values_list('tags', flat=True)
我以前没有使用过taggit
,但我没有找到任何可以直接查询Tag
模型的文档。