2009-12-29 69 views
3

其實我是想完成同樣的事情,用戶在Django的分頁 - 緬懷檢查跨越

Remembering checked checkboxes across pages - what's the best way?

問頁面複選框。但不適用於PHP,我希望它爲Django。由於django只是偉大的:-)

我使用分頁,並希望記住選中的複選框,而用戶瀏覽分頁提供的頁面。

現在我正在尋找一個最佳實踐,我如何才能做到這一點。我真的沒有一個好主意,我怎麼能做到這一點。我的想法包括javascript,但我確定有沒有js的解決方案。

回答

1

我想不出有什麼辦法可以用paginator做到這一點。但是這是formwizarddynamic 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類來製作表單,因此您可以使用任何類型的個性化設置。

順便說一句:我沒有測試過這個代碼,所以它可能有一些錯別字,但它應該足以讓你在路上。

編輯...修正排序問題,現在所有排序都應該在頁面之間正確保存!