我实际上想在
中完成与用户相同的事情Remembering checked checkboxes across pages - what's the best way?
问。但不是php,我想要django。由于django很棒: - )
我正在使用分页,并希望在用户浏览分页提供的页面时记住选中的复选框。
现在我正在寻找一个如何实现这一目标的最佳实践。我真的不知道如何才能做到这一点。我的想法将包括javascript,但我确信在某处有一个没有js的解决方案。
答案 0 :(得分:1)
我想不出用分页器做这件事的任何方法。但这是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类来制作表单,因此您可以使用任何类型的个性化。
顺便说一句:我没有测试过这段代码,所以可能会有一些错别字,但它应该足以让你上路了。编辑...修复排序问题,现在所有排序都应该在页面之间正确保存!