2010-09-12 6 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

+0

Пожалуйста, не используйте имена '__'. Когда-либо. –

+0

Я думал, что это было для частных методов? – JPC

ответ

1

Чтобы установить начальные значения с точки зрения вы должны сделать:

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

Чтобы сохранить данные, связанные с пользователем настойчивы с помощью различных запросов, вы не должны использовать глобал, но sessions!

+0

Да, я понял, что начальная ценность сейчас только сейчас! Я не уверен, где именно поставить код для его вставки в сеанс, но я рассмотрю его. Думаю, имеет смысл использовать сеансы с момента его сохранения. Я вроде бы был под впечатлениями сессий только для таких вещей, как вход и выход! – JPC

+0

Отредактировано мое оригинальное сообщение – JPC

Смежные вопросы