List Info

Thread: Using formtools.preview get AttributeError: 'ModelFormPreviewClass' object has no attribute 'has




Using formtools.preview get AttributeError: 'ModelFormPreviewClass' object has no attribute 'has
user name
2007-12-17 04:01:05
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/loc
ale.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-usersgooglegroups.com
To unsubscribe from this group, send email to
django-users-unsubscribegooglegroups.com
For more options, visit this group at htt
p://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---


[1]

about | contact  Other archives ( Real Estate discussion Medical topics )