2010-09-12 72 views
0

我想通過在Django中實現我自己的可排序表來練習一些django基礎知識,並且遇到了一些問題。Django POST/GET練習

下面是我在我的觀點工作代碼:

def __table_view_helper__(request): 
    if not request.session.__contains__('filters'): 
     filters = {'filterA':'', 
        'filterB':'', 
        'filterC':''} 
     request.session['filters'] = filters 
    if not request.session.__contains__('headers'): 
     headers = {'sortA':'asc', 
      'sortB':'des', 
      'sortC':'asc', 
      'sortD':'asc'} 
     request.session['headers'] = headers 

def table_view(request): 
    __table_view_helper__(request) 
    records = Record.objects.all() 
    nums = list(set(records.values_list('fieldA','fieldA'))) 
    nums.sort() 
    if request.method == 'POST': 
     filter = FilterForm(nums,request.POST) 
     if filter.is_valid(): 
      fieldA = filter.cleaned_data['fieldA'] 
      fieldB = filter.cleaned_data['fieldB'] 
      fieldC = filter.cleaned_data['fieldC'] 
      filters = request.session['filters'] 
      filters['fieldA'] = fieldA 
      filters['fieldB'] = fieldB 
      filters['fieldC'] = fieldC 
      request.session['filters'] = filters 
    else: 
     filter = FilterForm(nums) 
     filters = request.session['filters'] 
     filter.fields['fieldA'].initial = filters['fieldA'] 
     filter.fields['fieldB'].initial = filters['fieldB'] 
     filter.fields['fieldC'].initial = filters['fieldC'] 
    if filters['fieldA']: 
     records = records.filter(fieldA=filters['fieldA']) 
    if filters['fieldB']: 
     records = records.filter(fieldB__in=filters['fieldB']) 
    if filters['fieldC']: 
     records = records.filter(fieldC=filters['fieldC']) 
    sort = request.GET.get('sort') 
    if sort is not None: 
     headers = request.session['headers'] 
     if headers[sort] == "des": 
      records = records.order_by(sort).reverse() 
      headers[sort] = "asc" 
     else: 
      records = records.order_by(sort) 
      headers[sort] = "des" 
     request.session['headers'] = headers 
    return render_to_response("secure/table.html",{'user':request.user,'profile':request.user.get_profile(),'records':records,'fform':filter}) 

,我改變了我的代碼現在使用的會話。它工作正常。這是你認爲這樣做的好方法嗎?

+1

如果你想存儲與一個用戶相關的值,使用會話 – leoluk 2010-09-12 20:34:52

+0

請不要使用'__'名稱。永遠。 – 2010-09-12 21:34:07

+0

我認爲這是私人方法? – JPC 2010-09-12 23:18:03

回答

1

要從視圖設置的初始值,你要做的:

filter.fields['fieldA'].initial = filters['filterA'] 

能夠保持用戶相關的數據持久化通過不同的要求,你不應該使用全局變量,但sessions

+0

是的,我剛纔想出了初始值的東西!我不確定把代碼粘貼到會話中的確切位置,但我會研究它。我想這是有道理的使用會議,因爲它的堅持。我有點在印象之下會議只是爲了登錄和註銷等事情! – JPC 2010-09-12 20:45:28

+0

編輯我原來的帖子 – JPC 2010-09-12 21:11:54