我想不出有什麼辦法可以用paginator做到這一點。但是這是formwizard和dynamic forms的好地方。總體思路是爲每個「頁面」創建一個動態表單,然後用一個表單嚮導將它們全部組合在一起。這允許將複選框保存在多個頁面中,並且可以輕鬆地前後移動。最好的事情是它幾乎不需要代碼!
像這樣的東西應該能夠應付一切:
from django.contrib.formtools.wizard import FormWizard
from django import forms
from django.forms.extras.widgets import CheckboxSelectMultiple
from django.core.paginator import Paginator
# In your forms.py --------------
def MPageFormMaker(paginator):
"""
Create a "paginated" group of forms based on a queryset and num-per-page item.
"""
def Sform(this_q):
"""
Create this page's items
"""
class _PageForm(forms.Form):
items = forms.ModelMultipleChoiceField(queryset = this_q,
widget = forms.CheckboxSelectMultiple)
return _PageForm
for i in range(paginator.num_pages):
yield Sform(paginator.page(i).object_list)
class MpageForm(FormWizard):
def done(self, request, formlist):
#do something with the list of forms
#----- In your views.py
def MpageChecker(request):
qset = Item.objects.all()
paginator = Paginator(qset, 30)
formwizard = MPageForm(list(MPageFormMaker(paginator)))
#then deal with it like a normal formwizard
本質上只是實例化formwizard類,然後讓它照顧一切。由於它使用paginator類來製作表單,因此您可以使用任何類型的個性化設置。
順便說一句:我沒有測試過這個代碼,所以它可能有一些錯別字,但它應該足以讓你在路上。
編輯...修正排序問題,現在所有排序都應該在頁面之間正確保存!