使用默认查询在Django中动态过滤

2024-04-24 05:32:46 发布

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

我读过这个问题的精彩解释 Dynamically filter ListView CBV in Django 1.7。在

但我不想在queryset上得到额外的帮助。在

# urls.py
    urlpatterns = patterns('',
        url(r'^(?P<exp>[ASG])$', \
          ScholarshipDirectoryView.as_view(),\
          name='scholarship_directory'),)

# views.py
class ScholarshipDirectoryView(ListView):
    queryset= Scholarship.objects.all()
    model = Scholarship
    template_name = 'scholarship-directory.html'

    def get_queryset(self):
        qs = super(ScholarshipDirectoryView, self).get_queryset()
        return qs.filter(experience_level__exact=self.kwargs['exp'])

如果url中缺少“exp”参数,那么回退到标准queryset的干法是什么?在

我想采用这种方法,因为我认为对完整的Queryset和定制/过滤的Queryset执行额外的视图或额外的urlpattern是没有意义的。在


Tags: namepyselfurlgetfilterdirectoryqueryset
1条回答
网友
1楼 · 发布于 2024-04-24 05:32:46

只需用if包装它。在

    qs = super(ScholarshipDirectoryView, self).get_queryset()
    exp =  self.kwargs['exp']
    if exp:
        qs = qs.filter(experience_level__exact=exp)
    # return the new or the old queryset.
    return qs

相关问题 更多 >