【问题标题】:Get tags user commented of blogpost on获取用户评论博客文章的标签
【发布时间】:2021-12-03 09:25:50
【问题描述】:

我正在构建一个博客应用程序,我正在尝试获取用户评论的所有标签,并且该评论的博客附有标签。

例如:-* 如果 blog_1 有名为 tag_1tag_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”实例。

然后我尝试了

query = BlogPost.objects.filter(taggit_taggeditem_items__blogpost__user=request.user)

它也显示了同样的错误。

任何帮助将不胜感激。谢谢你

【问题讨论】:

    标签: python django-views django-queryset django-taggit


    【解决方案1】:

    我希望我能正确理解您在这里想要实现的目标。您想要获取用户评论过的所有博客文章的标签。如果这是正确的,这是我的想法:

    我在下面定义了我自己的模型来支持我的回答。稍微调整了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 查询以通过特定Comments 获取所有BlogPosts 和User 并访问所有这些BlogPosts 的标签。

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

    我之前没有使用过taggit,但是我没有找到可以直接查询Tag模型的documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-26
      • 2018-09-12
      • 2021-08-21
      • 1970-01-01
      • 2016-02-02
      • 2011-03-18
      • 2022-12-17
      相关资源
      最近更新 更多