2009-03-09 24 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') 

Gördüğünüz gibi, birkaç yolu denedim ve yorumlandı. Görev açıkça anlaşılır: Kullanıcıyı, kaydetmeden önce istek formuna ekleyin ve kaydedin.Django Form Önizleme - Kullanıcıyı bir forma kaydetmeden önce kaydetme

Kabul edilen, çalışma yöntemi nedir?

cevap

12

Kullanıcı değiştirilemezse, ilk etapta formda yer almaması gerektiğini bile söyleyebilirim. Ortaya çıkan nesneyi önlemek için

iki şekilde de, using the commit argument çalışması gerekir hemen kaydedilmesini (FormPreviewModelForm kullanır varsayarak):

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

Teşekkür insin, sağda! Eğer takip etmek isterseniz daha fazla ilgili bir sorum var: http://stackoverflow.com/questions/628132/django-form-preview-how-to-work-with-cleaneddata en iyi thx. –

+0

@insin 'object.save()' tarafından bir hata oluştuğunda ne olur? Bu, çoğu zaman basit bir 'request.user' davasıyla durum olmayabilir, ancak daha karmaşık durumlar hakkında. Kaydetmeden (commit = False) sonra doğrulama ve hata işleme ile nasıl başa çıkıyorsunuz? – orokusaki

İlgili konular