获取用户评论的标签



我正在构建一个博客应用程序,我试图获得所有的标签,其中用户评论和评论的博客是附加标签。

例如:-*如果一个blog_1有标签命名为tag_1,tag_2tag_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的所有BlogPostComments,并访问所有这些BlogPosts的标签。

blog_post_tags = BlogPost.objects.filter(
blog_comment__user=request.user).values_list('tags', flat=True)

我以前没有使用过taggit,但我没有找到任何可以直接查询Tag模型的文档。