2013-05-29 73 views
1

很多的時候,我看到:查詢集Django的通用視圖

def get_queryset(self): 
    queryset = super(SomeView, self).get_queryset() 
    return queryset.filter(published=True) 

這是一個基於Django的類視圖典型。我想知道是什麼,爲什麼我們這樣做,我們可以做這樣的:

queryset = someModel.objects.all().filter(args) 

或者如果你喜歡兩行(或你覺得我就像一個襯墊,這是不是這樣的這裏):

all_the_stuff = someModel.objects.all() 
the_stuff_we_want = all_the_stuff.filter(...) 

此外,請問super()呼叫背後的邏輯正是上班,因爲我根本不明白這一點。任何鏈接到一些很好的文檔解釋這將是高度讚賞,爲什麼要使用它,當第二個例子是更容易理解。

回答

1

如果超類有額外的過濾,那麼過濾器將通過調用super的get_queryset方法進行鏈接。這可能是一種罕見的情況,當需要多個級別的繼承時,它會更幹。

class CompanyListView(ListView): 
    def get_queryset(self): 
     queryset = super(CompanyListView, self).get_queryset() 
     return queryset.filter(company=self.company) 

class EmployeeListView(CompanyListView): 
    def get_queryset(self): 
     queryset = super(EmployeeListView, self).get_queryset() 
     return queryset.filter(active=True) 

class LocationListView(CompanyListView): 
    def get_queryset(self): 
     queryset = super(LocationListView, self).get_queryset() 
     return queryset.filter(published=True)