Hi ALL!

If I use ModelForm + FormPreview + form.save() call in done() it never
update objects if PK is AutoField, but always create them, why it can
be so? FormPreview doesn't store PK value enywhere (ex.: to use in
form.instance.pk to determine that it is an update not create) ?

I redefine some FormPreview default methods preview_get() to pass form
instance to the template, post_post() to pass form instance to the
done() method, not just cleaned_data.

    if preview:
        from django.contrib.formtools.preview import FormPreview,
AUTO_ID
        class ModelFormPreviewClass(FormPreview):
            def preview_get(self, request):
                """Displays the form"""
                f = self.form(auto_id=AUTO_ID, instance=object)
                return render_to_response(self.form_template, {'form':
f, 'stage_field': self.                unused_name('stage'), 'state':
self.state}, context_instance=RequestContext(request))

            def post_post(self, request):
                """Validates the POST data. If valid, calls done().
Else, redisplays form."""
                f = self.form(request.POST, auto_id=AUTO_ID)
                if f.is_valid():
                    if self.security_hash(request, f) !=
request.POST.get(self.unused_name('hash')):
                        return self.failed_hash(request) # Security
hash failed.
                    return self.done(request, f)
                else:
                    return render_to_response(self.form_template,
{'form': f, 'stage_field': self.            unused_name('stage'),
'state': self.state}, context_instance=RequestContext(request))

            def done(self, request, form):
                new_object = form.save()
                response = model_post_save(new_object)
                return response
        return ModelFormPreviewClass(model_form)(request)


    if request.method == 'POST':
        new_data = request.POST.copy()

        form = model_form(new_data, instance=object)
        if form.is_valid():
            new_object = form.save()
            response = model_post_save(new_object)
            return response
    else:
        form = model_form(instance=object)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to