0
製作查詢集我有一個ListView,它正在製作項目列表,比如產品。我想通過從模板發送參數來有條件地更改此查詢集。假設我想過濾supplier_id或類似日期的其他內容。我應該創建一個新的查看每個情況或擴展基本的ListView視病情鮑勃迪倫只有我查詢集或者根據傳遞的參數,我應該只使用一個ListView和處理每一個情況,所以ListView基於參數
class ProductListView(ListView):
...
def get_queryset(self):
return Supplier.objects.all()
class ProductBySupplierListView(ProductListView):
def get_queryset(self):
return Supplier.objects.filter(supplier=self.kwargs['sup'])
或
class ProductListView(ListView):
...
def get_queryset(self):
if self.kwargs['sup']:
return Supplier.objects.filter(supplier=sup)
else:
return Supplier.objects.all().annotate(prd_cnt=Count('product'))
或者可能有一些更好的模式來處理多個條件排序問題。
我知道我可以像在Filtering Objects in Class based view Django using Query parameters?中說的那樣做所有事情,但是這是一個很好的設計,或者我應該更喜歡別的東西,比如前面提到的擴展和重寫queryset方法。
[基於類的視圖Django使用查詢參數過濾對象的可能重複?](https://stackoverflow.com/questions/31960428/filtering-objects-in-class-based-view-django-using-query-參數) – YPCrumble
是的,但我想知道這是正確的設計standpoing?現在我試圖擴展和重寫queryset方法每次我需要它,並有每個排序條件單獨的URL映射。 – Dmitrii
你是什麼意思的一個「單獨的URL映射」?從設計角度來看,[接受的答案](https://stackoverflow.com/a/31960938/2532070)在這裏是正確的。因此,您的第二種過濾方式是正確的,除非還有其他未提及的內容,這意味着供應商過濾需要自己的子類別視圖。 – YPCrumble