5

我已经工作了几个小时试图理解以下问题:我有一个用户发送 Ajax 请求以动态发送表单并记录提交时要阅读的表单数量增加了。为此,我使用request.session['editing_foo'] = { 'prefix_of_form_elements' : pkey }这样我可以将它们与数据库关联以进行保存和加载(-1 用于尚未保存的新表单)。

但是,当我使用以下代码(见底部)时,我得到以下奇怪的输出:

第一次点击:

{} foousername
next_key 1
1
{u'1-foo': -1}

第二次点击:

{} foousername
next_key 1
1
{u'1-foo': -1}

第三个要求:

{} foousername
next_key 1
1
{u'1-foo': -1}

到底他妈发生了什么?

id_fetcher = re.compile(r'\d')


@login_required
def ajax_add_foo(request):
    def id_from_prefix(key):
        return int( id_fetcher.search(key).group(0) )

    if 'editing_foos' not in request.session:
        print "reinitializing"
        request.session['editing_foos'] = {}

    print request.session['editing_foos'], request.user
    keys = request.session['editing_foos'].keys()
    if len(keys) == 0:
        next_key = 1
    else:
        print [ id_from_prefix(key) for key in keys ]
        next_key = max([ id_from_prefix(key) for key in keys ]) + 1
    print "next_key", next_key

    fooform = FooForm(prefix=next_key)
    print next_key

    request.session['editing_foos'].update( {create_prefix(FooForm, next_key) : -1 } ) # This quote is new and has no pkey
    print request.session['editing_foos']

    return render_to_response( 'bar/foo_fragment.html',
                                {'fooform' : fooform, },
                                context_instance=RequestContext(request))

非常感谢大家!

注意:这是上一个关于相同源代码的问题的后续。

4

1 回答 1

13

我认为我没有完全理解这个问题,但您可能想看看您正在使用哪个会话引擎

如果您使用的是缓存会话引擎,则需要确保已正确设置缓存(例如,虚拟缓存只会丢弃您的会话数据)

另一种可能性是您的会话没有被保存,因为您没有更改会话,而是更改了存储在会话中的可变对象。您可以尝试通过在视图中的某处添加它来强制会话保存

request.session.modified = True
于 2009-12-22T14:58:03.217 回答