2016-08-13 75 views
0

我已阅读此问题中的出色说明 Dynamically filter ListView CBV in Django 1.7在Django中使用默认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和Custom/Filtered Queryset制定额外的视图或额外的urlpattern是有意义的。

回答

0

只是将它包裹在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 
+0

是的我知道,但它干吗? @ daniel-roseman – villancikos

+0

重复什么? –

+0

你是对的。没有什么是重复的。虽然我没有得到它的工作。它返回完整的qs。 – villancikos