Django POST / GET练习

时间:2010-09-12 20:33:22

标签: python django django-forms

我正在尝试通过在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 个答案:

答案 0 :(得分:1)

要从您必须执行的视图设置初始值:

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

要通过不同的请求保持用户相关数据的持久性,您不应该使用全局变量,而是sessions