如果 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
我的博客有一个列表视图:
#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