2016-08-13 55 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