如果 URL 中存在参数,则使用 Listview 的 Django 自定义查询集

Django Custom Queryset Using Listview if Parameters Exist in URL

我的博客有一个列表视图:

#views.py
class BlogListView(ListView):
    model = Blog
    template_name = 'blog/index.html'
    context_object_name = 'blogs'
    ordering = ['-date_posted']
    paginate_by = 5

#urls.py 
path('', BlogListView.as_view(), name='blog-index'),

在我的模型中,我有不同类型的博客,例如视频博客或文本博客。我的模型是这样的:

class Blog(models.Model):
    TYPE = (
        ('Video', 'Video'),
        ('Text', 'Text'),
    )
    type = models.CharField(max_length=10, choices=TYPE, default='Text')

现在我想用request.GET.get('type')查询不同的类型。例如,如果我去 url,127.0.0.1:8000/?type=video 我只想显示视频类型的博客。是否可以仅使用此列表视图来执行此操作,还是我必须创建其他列表视图。我需要有关制作此功能的帮助。

,您可以通过覆盖 .get_queryset(…) method [Django-doc]:

ListView 中实现
class BlogListView(ListView):
    model = Blog
    template_name = 'blog/index.html'
    context_object_name = 'blogs'
    ordering = ['-date_posted']
    paginate_by = 5

    def <strong>get_queryset</strong>(self):
        type = self.request.GET.get('type')
        qs = super().get_queryset()
        if type is not None:
            return qs.filter(<strong>type__iexact=type</strong>)
        return qs