Taggit Django - 基于用户帖子标签返回帖子视图)

时间:2021-06-04 15:25:57

标签: python django django-taggit

我最近一直在玩 Taggit。通过添加以下过滤器 .filter(tags__name__in='categoryone'),我设法根据不同的标签过滤了我的帖子模型。

尽管如此,有人能指导我如何根据我的用户在他或她以前的帖子中已经使用的标签来过滤我的帖子吗?

例如,如果我的用户之前在“categoryone”标签内创建了一个帖子,他或她在他们的帖子提要上看到的所有帖子都将是与“categoryone”相关的标签,但他或她不会看到“categorytwo”或“categorythree”内的任何帖子,除非他或她在其中一个或两个类别中发帖。

我希望 .filter(tags=self.request.user) 之类的东西会起作用,但这会引发标记实例错误。理想情况下,我想添加一个过滤器,过滤我的用户在以前的帖子中使用的现有标签。

任何示例将不胜感激! :-)

谢谢!

--

Views.py(查询 PostListView)

  def get_queryset(self):
        user = self.request.user
        tags = Tag.objects.filter(post__author=user)

        qs = Follow.objects.filter(user=user)
        qa = Tag.objects.filter(post__author=user)
        follows = [user]
        tags = [user]
        for obj in qs:
            follows.append(obj.follow_user)
        for obj in qa:
            obj.user = self.request.user
        return Post.objects.filter(author__in=follows).filter(author__in=tags).order_by('-date_posted')

模型.py

class Post(models.Model):
    content = models.TextField(max_length=1000)
    date_posted = models.DateTimeField(default=timezone.now)
    image = models.ImageField(default='default.png', upload_to='srv_media')
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    likes= models.IntegerField(default=0)
    dislikes= models.IntegerField(default=0)
    tags = TaggableManager()

1 个答案:

答案 0 :(得分:1)

尝试根据您当前的工作给出答案:

def get_queryset(self):
        user = self.request.user
        tags = Tag.objects.filter(post__author=user)

        qs = Follow.objects.filter(user=user)
        qa = Tag.objects.filter(post__author=user)
        follows = [user]
        tags = [user] 
        for obj in qs:
            follows.append(obj.follow_user)
        for obj in qa:
            tags.append(obj.post.author)
        return Post.objects.filter(author__in=follows).filter(author__in=tags).order_by('-date_posted')