如何筛选出对象并仅显示用户位于与对象关联的多个字段中的对象

2024-05-20 23:21:45 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个系统,我的Post对象有一个很多字段,它叫做Saves。比如在Reddit上,你可以保存一篇帖子。因此,我让它工作起来,用户可以保存帖子,并将它们添加到ManyToMany字段。但是,我想过滤掉这些帖子,只显示所述用户在manytomy字段中的帖子

这是我的models.py

class Post(models.Model):
    author = models.ForeignKey(User,related_name='posts',on_delete=models.CASCADE)
    saves = models.ManyToManyField(User,blank=True,related_name='post_saves')

我将saves字段连接到Django提供的User模型

这是我的views.py

class PostSaveRedirect(RedirectView):
    def get_redirect_url(self,*args,**kwargs):
        pk = self.kwargs.get("pk")
        slug = self.kwargs.get("slug")
        obj = get_object_or_404(Post,pk=pk,slug=slug)
        url_ = obj.get_absolute_url()
        user = self.request.user
        if user.is_authenticated:
            if user in obj.saves.all():
                obj.saves.remove(user)
            else:
                obj.saves.add(user)
        return url_

这一切都很好,它将用户添加到ManyToMany字段,但现在我想知道如何过滤掉帖子,只显示用户在ManyToMany字段中的帖子

这是我保存的帖子视图

class PostSaveListView(ListView):
    model = Post
    template_name = 'mainapp/post_saved.html'
    paginate_by = 10
    queryset = models.Post.objects.all()

    def get(self,request):
        posts = Post.objects.all()
        return render(request, self.template_name)

    def get_queryset(self):
        return Post.objects.filter().order_by('-published_date')

因此,使用Post.objects.all(),我如何更改它以使其符合我的需要? 这是一个类似的查询集,用于我拥有的用户帖子列表视图

我一直在谷歌上搜索和阅读文档和其他文章,但没有找到任何东西能够告诉我如何过滤许多字段。任何帮助都将不胜感激


Tags: 用户nameselfobjurlgetobjectsmodels