[英]changeing ListView get_queryset? pagination in django
今天是個好日子。 我在使用 django 中的分頁器時遇到了一些問題。 我的數據庫中有所有客戶信息,所以我想做的是顯示該信息,但我進行了搜索 function 在其中單擊字母按鈕,例如單擊 A,它將過濾所有客戶姓氏以字母A開頭,如果單擊B,它將過濾所有姓氏以B開頭的客戶,依此類推。 這可以正常工作,問題是我還想在每頁顯示 10 個客戶,所以如果我有 20 個客戶,他們的姓氏以字母 A 開頭,你會看到 10 個客戶和一個顯示 (< << page 1 page 2 >>> ) 或類似的東西,應該用分頁器解決,我添加了它,但它不起作用。 我認為問題在於,也許我得到的 function 正在重寫來自 ListView 的 get_query function? 我嘗試了不同的東西,但我不確定。 這是我在視圖中的代碼:
class ExpedientView(ListView):
queryset = Portfolio.objects.filter(products__isnull=True).order_by('owner__last_name')
template_name = 'dashboard-admin/portfoliorecords.html'
paginate_by = 10
def get(self,request):
if request.GET['letter'] == '':
context_object_name = 'portfolios'
queryset = Portfolio.objects.filter(products__isnull=True).order_by('owner__last_name')
context = queryset
else:
letter = request.GET['letter']
context_object_name = 'portfolios'
queryset = Portfolio.objects.filter(products__isnull=True).order_by('owner__last_name').filter(owner__last_name__istartswith=letter)
context = queryset
return render(request, 'dashboard-admin/portfoliorecords.html', {'portfolios': context})
get(self,request) function 運行良好,但是 paginated_by 的第一部分不起作用。
在我添加 get function 並過濾所有客戶之前,分頁器工作正常,所以在模板中,代碼工作正常。
如果您需要做的只是動態更改查詢集,那么您應該重寫get_queryset
而不是覆蓋get
(它會調用視圖中的相應函數,這將執行所有分頁任務等):
class ExpedientView(ListView):
queryset = Portfolio.objects.filter(products__isnull=True)
template_name = 'dashboard-admin/portfoliorecords.html'
paginate_by = 10
ordering = 'owner__last_name' # Put the ordering here instead of specifying it in the queryset
def get_queryset(self):
queryset = super().get_queryset()
letter = self.request.GET.get('letter')
if letter:
queryset = queryset.filter(owner__last_name__istartswith=letter)
return queryset
您必須修改def get_queryset(self)
方法而不是def get(self, request)
方法
刪除def get(self, request)
方法和下面的代碼。
def get_queryset(self):
queryset = Portfolio.objects.filter(products__isnull=True).order_by('owner__last_name')
letter = request.GET.get('letter', None)
if letter:
queryset.filter(owner__last_name__istartswith=letter)
return queryset
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.