Джанго POST / GET упражнение - PullRequest
       5

Джанго POST / GET упражнение

0 голосов
/ 13 сентября 2010

Я пытаюсь попрактиковаться в некоторых основах Django, реализуя свою собственную сортируемую таблицу в Django, и натолкнулся на пару ошибок.

Вот код, с которым я работаю на мой взгляд:

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 Ответ

1 голос
/ 13 сентября 2010

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

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

Для сохранения постоянства пользовательских данных при различных запросах не следует использовать глобальные переменные, но сеансы !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...