diff options
| author | Adrian Holovaty <adrian@holovaty.com> | 2006-05-02 01:31:56 +0000 |
|---|---|---|
| committer | Adrian Holovaty <adrian@holovaty.com> | 2006-05-02 01:31:56 +0000 |
| commit | f69cf70ed813a8cd7e1f963a14ae39103e8d5265 (patch) | |
| tree | d3b32e84cd66573b3833ddf662af020f8ef2f7a8 /django/views/generic/create_update.py | |
| parent | d5dbeaa9be359a4c794885c2e9f1b5a7e5e51fb8 (diff) | |
MERGED MAGIC-REMOVAL BRANCH TO TRUNK. This change is highly backwards-incompatible. Please read http://code.djangoproject.com/wiki/RemovingTheMagic for upgrade instructions.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@2809 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/views/generic/create_update.py')
| -rw-r--r-- | django/views/generic/create_update.py | 81 |
1 files changed, 37 insertions, 44 deletions
diff --git a/django/views/generic/create_update.py b/django/views/generic/create_update.py index e9b552df3b..0605744e3d 100644 --- a/django/views/generic/create_update.py +++ b/django/views/generic/create_update.py @@ -1,20 +1,20 @@ -from django import models from django.core.xheaders import populate_xheaders -from django.core.template import loader -from django.core import formfields, meta -from django.views.auth.login import redirect_to_login -from django.core.extensions import DjangoContext +from django.template import loader +from django import forms +from django.db.models import FileField +from django.contrib.auth.views import redirect_to_login +from django.template import RequestContext from django.core.paginator import ObjectPaginator, InvalidPage -from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect -from django.core.exceptions import Http404, ObjectDoesNotExist, ImproperlyConfigured +from django.http import Http404, HttpResponse, HttpResponseRedirect +from django.core.exceptions import ObjectDoesNotExist, ImproperlyConfigured -def create_object(request, app_label, module_name, template_name=None, +def create_object(request, model, template_name=None, template_loader=loader, extra_context={}, post_save_redirect=None, login_required=False, follow=None, context_processors=None): """ Generic object-creation function. - Templates: ``<app_label>/<module_name>_form`` + Templates: ``<app_label>/<model_name>_form.html`` Context: form the form wrapper for the object @@ -22,13 +22,12 @@ def create_object(request, app_label, module_name, template_name=None, if login_required and request.user.is_anonymous(): return redirect_to_login(request.path) - mod = models.get_module(app_label, module_name) - manipulator = mod.AddManipulator(follow=follow) + manipulator = model.AddManipulator(follow=follow) if request.POST: # If data was POSTed, we're trying to create a new object new_data = request.POST.copy() - if mod.Klass._meta.has_field_type(meta.FileField): + if model._meta.has_field_type(FileField): new_data.update(request.FILES) # Check for errors @@ -40,7 +39,7 @@ def create_object(request, app_label, module_name, template_name=None, new_object = manipulator.save(new_data) if not request.user.is_anonymous(): - request.user.add_message("The %s was created successfully." % mod.Klass._meta.verbose_name) + request.user.message_set.create(message="The %s was created successfully." % 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. @@ -56,11 +55,11 @@ def create_object(request, app_label, module_name, template_name=None, new_data = manipulator.flatten_data() # Create the FormWrapper, template, context, response - form = formfields.FormWrapper(manipulator, new_data, errors) + form = forms.FormWrapper(manipulator, new_data, errors) if not template_name: - template_name = "%s/%s_form" % (app_label, module_name) + template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower()) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'form': form, }, context_processors) for key, value in extra_context.items(): @@ -70,15 +69,15 @@ def create_object(request, app_label, module_name, template_name=None, c[key] = value return HttpResponse(t.render(c)) -def update_object(request, app_label, module_name, object_id=None, slug=None, +def update_object(request, model, object_id=None, slug=None, slug_field=None, template_name=None, template_loader=loader, - extra_lookup_kwargs={}, extra_context={}, post_save_redirect=None, + extra_context={}, post_save_redirect=None, login_required=False, follow=None, context_processors=None, template_object_name='object'): """ Generic object-update function. - Templates: ``<app_label>/<module_name>_form`` + Templates: ``<app_label>/<model_name>_form.html`` Context: form the form wrapper for the object @@ -88,23 +87,20 @@ def update_object(request, app_label, module_name, object_id=None, slug=None, if login_required and request.user.is_anonymous(): return redirect_to_login(request.path) - mod = models.get_module(app_label, module_name) - # Look up the object to be edited lookup_kwargs = {} if object_id: - lookup_kwargs['%s__exact' % mod.Klass._meta.pk.name] = object_id + lookup_kwargs['%s__exact' % model._meta.pk.name] = object_id elif slug and slug_field: lookup_kwargs['%s__exact' % slug_field] = slug else: raise AttributeError("Generic edit view must be called with either an object_id or a slug/slug_field") - lookup_kwargs.update(extra_lookup_kwargs) try: - object = mod.get_object(**lookup_kwargs) + object = model.objects.get(**lookup_kwargs) except ObjectDoesNotExist: - raise Http404("%s.%s does not exist for %s" % (app_label, module_name, lookup_kwargs)) + raise Http404, "No %s found for %s" % (model._meta.verbose_name, lookup_kwargs) - manipulator = mod.ChangeManipulator(object.id, follow=follow) + manipulator = model.ChangeManipulator(getattr(object, object._meta.pk.name), follow=follow) if request.POST: new_data = request.POST.copy() @@ -114,7 +110,7 @@ def update_object(request, app_label, module_name, object_id=None, slug=None, manipulator.save(new_data) if not request.user.is_anonymous(): - request.user.add_message("The %s was updated successfully." % mod.Klass._meta.verbose_name) + request.user.message_set.create(message="The %s was updated successfully." % model._meta.verbose_name) # Do a post-after-redirect so that reload works, etc. if post_save_redirect: @@ -128,11 +124,11 @@ def update_object(request, app_label, module_name, object_id=None, slug=None, # This makes sure the form acurate represents the fields of the place. new_data = manipulator.flatten_data() - form = formfields.FormWrapper(manipulator, new_data, errors) + form = forms.FormWrapper(manipulator, new_data, errors) if not template_name: - template_name = "%s/%s_form" % (app_label, module_name) + template_name = "%s/%s_form.html" % (model._meta.app_label, model._meta.object_name.lower()) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { 'form': form, template_object_name: object, }, context_processors) @@ -142,12 +138,12 @@ def update_object(request, app_label, module_name, object_id=None, slug=None, else: c[key] = value response = HttpResponse(t.render(c)) - populate_xheaders(request, response, app_label, module_name, getattr(object, object._meta.pk.name)) + populate_xheaders(request, response, model, getattr(object, object._meta.pk.name)) return response -def delete_object(request, app_label, module_name, post_delete_redirect, +def delete_object(request, model, post_delete_redirect, object_id=None, slug=None, slug_field=None, template_name=None, - template_loader=loader, extra_lookup_kwargs={}, extra_context={}, + template_loader=loader, extra_context={}, login_required=False, context_processors=None, template_object_name='object'): """ Generic object-delete function. @@ -156,7 +152,7 @@ def delete_object(request, app_label, module_name, post_delete_redirect, fetched using GET; for safty, deletion will only be performed if this view is POSTed. - Templates: ``<app_label>/<module_name>_confirm_delete`` + Templates: ``<app_label>/<model_name>_confirm_delete.html`` Context: object the original object being deleted @@ -164,32 +160,29 @@ def delete_object(request, app_label, module_name, post_delete_redirect, if login_required and request.user.is_anonymous(): return redirect_to_login(request.path) - mod = models.get_module(app_label, module_name) - # Look up the object to be edited lookup_kwargs = {} if object_id: - lookup_kwargs['%s__exact' % mod.Klass._meta.pk.name] = object_id + lookup_kwargs['%s__exact' % model._meta.pk.name] = object_id elif slug and slug_field: lookup_kwargs['%s__exact' % slug_field] = slug else: raise AttributeError("Generic delete view must be called with either an object_id or a slug/slug_field") - lookup_kwargs.update(extra_lookup_kwargs) try: - object = mod.get_object(**lookup_kwargs) + object = model._default_manager.get(**lookup_kwargs) except ObjectDoesNotExist: - raise Http404("%s.%s does not exist for %s" % (app_label, module_name, lookup_kwargs)) + raise Http404, "No %s found for %s" % (model._meta.app_label, lookup_kwargs) if request.META['REQUEST_METHOD'] == 'POST': object.delete() if not request.user.is_anonymous(): - request.user.add_message("The %s was deleted." % mod.Klass._meta.verbose_name) + request.user.message_set.create(message="The %s was deleted." % model._meta.verbose_name) return HttpResponseRedirect(post_delete_redirect) else: if not template_name: - template_name = "%s/%s_confirm_delete" % (app_label, module_name) + template_name = "%s/%s_confirm_delete.html" % (model._meta.app_label, model._meta.object_name.lower()) t = template_loader.get_template(template_name) - c = DjangoContext(request, { + c = RequestContext(request, { template_object_name: object, }, context_processors) for key, value in extra_context.items(): @@ -198,5 +191,5 @@ def delete_object(request, app_label, module_name, post_delete_redirect, else: c[key] = value response = HttpResponse(t.render(c)) - populate_xheaders(request, response, app_label, module_name, getattr(object, object._meta.pk.name)) + populate_xheaders(request, response, model, getattr(object, object._meta.pk.name)) return response |
