【问题标题】:how to add filter to a queryset in django where the values come from the URL?如何在 django 中将过滤器添加到值来自 URL 的查询集中?
【发布时间】:2017-02-18 12:18:48
【问题描述】:

views.py

class ListPosts(generic.ListView):
    template_name = 'posts/list_posts.html'
    context_object_name = 'list_posts'

    def get_queryset(self):
        #kwargs={ "slug": user.slug }
        qs = Post.objects.all().filter(user=self.request.user)
        return qs

这里添加了过滤器,因此查询集只过滤登录用户的帖子。 我的问题是如何显示来自 URL 中的 slug 的用户价值的帖子

urls.py

url(r'^(?P<slug>[\w.@+-]+)/Posts/$', ListPosts.as_view(), name='user_posts'),

示例:username/posts 我知道这可以通过从 URL 传递 kwargs 来完成。但是如何在同一个视图中使用两个不同的模型呢?

【问题讨论】:

  • 检查request.GET()

标签: python django


【解决方案1】:

如果我理解正确,您想使用 URL 中的 slug 值进行过滤。您可以使用 self.kwargs 字典访问它。可以这样做:

class ListPosts(generic.ListView):
    template_name = 'posts/list_posts.html'
    context_object_name = 'list_posts'

    def get_queryset(self):
        qs = Post.objects.filter(
            user=self.request.user,
            some_field=self.kwargs['slug'])
        return qs

【讨论】:

  • 我收到此错误 无法将关键字“slug”解析为字段 qs = Post.objects.all().filter(user=self.request.user, slug=self.kwargs['slug'])
【解决方案2】:

views.py

def get_queryset(self):
    qs = Posts.objects.all().filter(user__slug__exact=self.kwargs['slug'])
    return qs

我发现 Django: invalid literal for int() with base 10">这是为了解决问题。

Quote.objects.filter([model]__[field]__exact = [whatever])

【讨论】:

    猜你喜欢
    • 2010-11-30
    • 2016-04-16
    • 1970-01-01
    • 2016-03-20
    • 2010-10-14
    • 2015-09-14
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多