2009-12-22 13 views
5

Ho lavorato per ore cercando di capire il seguente problema: ho un utente che invia una richiesta Ajax per inviare dinamicamente un modulo e registrare che il numero di moduli da leggere sull'invio è aumentato. A tal fine, utilizzo request.session['editing_foo'] = { 'prefix_of_form_elements' : pkey } in modo da poterli associare al database per il salvataggio e il caricamento (-1 è per i nuovi moduli che non sono stati ancora salvati).Django Session Dati persistenti ma perdenti

Tuttavia, quando uso il seguente codice (vedi in basso) ottengo il seguente bizzarra uscita:

primo Click:

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

secondo Click:

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

3 ° Richiesta:

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

Che diavolo sta succedendo?

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)) 

Grazie mille a tutti!

Nota: questo è un seguito di uno previous question riguardante lo stesso codice sorgente.

risposta

11

Non credo di capire completamente la domanda, ma si consiglia di dare un'occhiata a che session engine stai usando

se si sta utilizzando il motore di cache di sessione è necessario assicurarsi di avere memorizzazione nella cache corretta (ad esempio, la cache fittizia getterebbe semplicemente i dati della sessione)

un'altra possibilità è che la sessione non venga salvata perché non stai cambiando la sessione, stai modificando un oggetto mutabile che è memorizzato nella sessione. puoi provare forcing the session to save aggiungendo questo da qualche parte nella tua vista:

request.session.modified = True 
+0

Bello! Sei un genio! Non ho mai visto menzionare questa opzione nei documenti! – SapphireSun

+0

Mi hai salvato la vita! Non l'ho visto nei documenti –

+0

grazie. ..! tu salva i miei giorni: P –