Hi all! I try to reimplement django generic create_object and update_object using newforms and formtools.preview. But I get some problems with HttpResponseRedirect (can't redirect from model_post_save sub, but why?) and preview (got strange errors).
When I try to use preview when I create an object I get this: Traceback (most recent call last): File "/home/sector119/devel/django_src/django/core/servers/ basehttp.py", line 277, in run self.result = application(self.environ, self.start_response) File "/home/sector119/devel/django_src/django/core/servers/ basehttp.py", line 619, in __call__ return self.application(environ, start_response) File "/home/sector119/devel/django_src/django/core/handlers/ wsgi.py", line 209, in __call__ response = middleware_method(request, response) File "/home/sector119/devel/django_src/django/middleware/locale.py", line 21, in process_response patch_vary_headers(response, ('Accept-Language',)) File "/home/sector119/devel/django_src/django/utils/cache.py", line 129, in patch_vary_headers if response.has_header('Vary'): AttributeError: 'ModelFormPreviewClass' object has no attribute 'has_header' # here is create_object view from django.core.exceptions import ImproperlyConfigured #from django.core.urlresolvers import reverse from django.template import loader, RequestContext from django.contrib.auth.views import redirect_to_login from django.http import HttpResponse, HttpResponseRedirect from django.newforms import ModelForm #from django.shortcuts import get_object_or_404 from django.contrib.auth.decorators import login_required from django.utils.translation import ugettext as _ def create_object(request, model, template_name=None, template_loader=loader, extra_context=None, post_save_redirect=None, login_required=False, model_form=None, context_processors=None, preview=False): """ Generic object-creation function. Templates: ``<app_label>/<model_name>_form.html`` Context: form the form wrapper for the object """ # FIXME: 'model' variable is rewriting somewhere in the ModelFormClass class. But where? model_ = model if extra_context is None: extra_context = {} if login_required and not request.user.is_authenticated(): return redirect_to_login(request.path) if model_form is None: class ModelFormClass(ModelForm): class Meta: model = model_ model_form = ModelFormClass def model_post_save(): if request.user.is_authenticated(): request.user.message_set.create(message=_("The %(verbose_name)s was created successfully.") % {"verbose_name": model_._meta.verbose_name}) # Redirect to the new object: first by trying post_save_redirect, # then by obj.get_absolute_url; fail if neither works. if post_save_redirect: return HttpResponseRedirect(post_save_redirect % new_object.__dict__) elif hasattr(new_object, 'get_absolute_url'): return HttpResponseRedirect(new_object.get_absolute_url()) else: raise ImproperlyConfigured("No URL to redirect to from generic create view.") # preview # AND HERE WE GOT AN ERROR!!! if preview: from django.contrib.formtools.preview import FormPreview class ModelFormPreviewClass(FormPreview): def done(self, request, cleaned_data): new_object = model_.objects.create(**cleaned_data) model_post_save() return ModelFormPreviewClass(model_form) if request.method == 'POST': if not request.FILES: form = model_form(request.POST) else: form = model_form(request.POST, request.FILES) if form.is_valid(): # No errors -- this means we can save the data! new_object = form.save() # This work fine! # if post_save_redirect: # return HttpResponseRedirect(post_save_redirect % new_object.__dict__) # But here, using model_post_save function I can't redirect, nothing is happen model_post_save() else: form = model_form() if not template_name: template_name = "%s/%s_form.html" % (model_._meta.app_label, model_._meta.object_name.lower()) t = template_loader.get_template(template_name) c = RequestContext(request, { 'form': form }, context_processors) for key, value in extra_context.items(): if callable(value): c[key] = value() else: c[key] = value return HttpResponse(t.render(c)) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---