2009-03-09 18 views
7
class RegistrationFormPreview(FormPreview): 
    preview_template = 'workshops/workshop_register_preview.html' 
    form_template  = 'workshops/workshop_register_form.html' 

    def done(self, request, cleaned_data): 
     # Do something with the cleaned_data, then redirect 
     # to a "success" page. 
     # data = request.POST.copy() 
     # data['user_id'] = u'%s' % (request.user.id) 
     # cleaned_data['user'] = u'%s' % (request.user.id) 
     #f = self.form(cleaned_data) 
     #f = self.form(data) 
     #f.user = request.user 


     f = self.form(request.POST) 
     f.save() 

     pdb.set_trace() 
     return HttpResponseRedirect('/register/success') 

Como puede ver, lo he intentado de varias maneras, y eso se ha comentado. La tarea es aparentemente simple: agregue al usuario de la solicitud al formulario antes de guardarlo y luego guárdelo.vista previa del formulario de Django - Agregar el usuario al formulario antes de guardar

¿Cuál es el método de trabajo aceptado aquí?

Respuesta

12

Si el usuario no puede ser modificado, yo diría que ni siquiera debería ser incluido en el formulario en el primer lugar.

De cualquier manera, using the commit argument para evitar que el objeto resultante se guarda inmediatamente debería funcionar (suponiendo FormPreview utiliza ModelForm):

obj = form.save(commit=False) 
obj.user = request.user 
obj.save() 
+0

Gracias insin, justo en! Tengo una pregunta refiere además si le gustaría seguir: http://stackoverflow.com/questions/628132/django-form-preview-how-to-work-with-cleaneddata mejor THX. –

+0

@insin ¿Qué sucede si se produce un error por 'obj.save()'? Es posible que este no sea el caso la mayor parte del tiempo con un simple caso 'request.user', pero ¿qué pasa con los casos más complicados? ¿Cómo se maneja la validación y la representación del error después de 'save (commit = False)' – orokusaki

Cuestiones relacionadas