2009-12-22 9 views
5

He estado trabajando durante horas tratando de entender el siguiente problema: Tengo un usuario que envía una solicitud Ajax para enviar dinámicamente un formulario y registrar que ha aumentado el número de formularios para leer en el envío. Con este fin, uso request.session['editing_foo'] = { 'prefix_of_form_elements' : pkey } para poder asociarlos con la base de datos para guardar y cargar (-1 es para formularios nuevos que aún no se han guardado).Django Session Datos perdidos pero perdidos

Sin embargo, cuando se utiliza el siguiente código (ver abajo) me sale el siguiente extraña salida:

primera Click:

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

segunda Click:

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

tercera Solicitud:

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

¿Qué diablos está pasando?

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

Muchas gracias a todos!

Nota: Este es un seguimiento de un previous question con respecto al mismo código fuente.

Respuesta

11

No creo que entiendo completamente la cuestión, pero es posible que desee echar un vistazo a lo que usted está utilizando session engine

si está usando el motor de sesión de caché que necesita para asegurarse de que tiene el almacenamiento en caché correctamente configurado (por ejemplo, la memoria caché arrojaría los datos de la sesión)

otra posibilidad es que su sesión no se guarda porque no está cambiando la sesión, está cambiando un objeto mutable que se almacena en la sesión. usted puede intentar forcing the session to save agregando esto en alguna parte en su vista:

request.session.modified = True 
+0

¡Hermoso! ¡Eres un genio! ¡Nunca vi mención de esa opción en los documentos! – SapphireSun

+0

¡Me salvaste la vida! No lo vi en los documentos –

+0

Thanx bro ..! me salvaste los días: P –

Cuestiones relacionadas