【问题标题】:Taggit Django - Return View of Posts Based on User Post Tags)Taggit Django - 基于用户帖子标签的帖子返回视图)
【发布时间】:2021-06-04 15:25:57
【问题描述】:

我最近一直在玩 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()

【问题讨论】:

  • 先获取用户标签,然后使用它们过滤帖子
  • @Kurohige 感谢您的回复!我已经用我的 Views.py 查询集更新了我在这里的原始帖子——我在正确的轨道上吗?我目前遇到此错误'Tag' object has no attribute 'post_author' 在我的 Posts 模型中,我分配了一个外键,我将其引用为“作者”。
  • 要获得详尽的答案,您应该给出详尽的问题 :) 还请添加有趣的模型类。谢谢
  • @Kurohige 啊,我现在就加他们Kurohige! :-) 对不起,我对 Django 还是有点陌生​​,所以如果我的任何代码看起来有点草率,我深表歉意,我只是想一点一点地学习! :-) 但是是的,我现在就添加模型!
  • @Kurohige 我已经更新了我原来的问题并提供了 Post 模型。我还设法摆脱了收到的标签实例错误(我的帖子提要现在再次显示),但我只看到我自己的帖子,而不是我和我的用户的帖子。 (我想我不小心过滤了帖子以显示在当前登录的用户下,而不是过滤标签) - 我还在上面的原始问题中更新了我的 Views.py 代码,因为我能够摆脱标签实例错误)

标签: python django django-taggit


【解决方案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')

【讨论】:

  • 啊,你做到了!你绝对的明星!非常感谢你! :-) 我已将您的答案标记为正确。我离得不远,但如果没有你的指导,我肯定无法弄清楚最后一点!如果我可以为您的时间捐款,请告诉我!! :-) 谢谢!!
  • @Jarjar95 :) 很高兴为您提供帮助
猜你喜欢
  • 2019-09-27
  • 2014-05-26
  • 1970-01-01
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多