Author: adrian
Date: 2007-01-14 14:32:58 -0600 (Sun, 14 Jan 2007)
New Revision: 4322
Modified:
django/branches/newforms-admin/django/contrib/admin/views/main.py
Log:
newforms-admin: Implemented ModelAdminView.change_view(). This is strictly a
copy of the preview change_stage() view -- it does not yet use newforms
Modified: django/branches/newforms-admin/django/contrib/admin/views/main.py
===================================================================
--- django/branches/newforms-admin/django/contrib/admin/views/main.py
2007-01-14 20:23:34 UTC (rev 4321)
+++ django/branches/newforms-admin/django/contrib/admin/views/main.py
2007-01-14 20:32:58 UTC (rev 4322)
@@ -137,8 +137,100 @@
def change_view(self, request, object_id):
"The 'change' admin view for this model."
- raise NotImplementedError('Change view with object %r' % object_id)
+ model = self.model
+ opts = model._meta
+ app_label = opts.app_label
+ if not request.user.has_perm(app_label + '.' +
opts.get_change_permission()):
+ raise PermissionDenied
+
+ if request.POST and request.POST.has_key("_saveasnew"):
+ return add_stage(request, app_label, opts.object_name.lower(),
form_url='../../add/')
+
+ try:
+ manipulator = model.ChangeManipulator(object_id)
+ except model.DoesNotExist:
+ raise Http404('%s object with primary key %r does not exist' %
(model_name, escape(object_id)))
+
+ if request.POST:
+ new_data = request.POST.copy()
+
+ if opts.has_field_type(models.FileField):
+ new_data.update(request.FILES)
+
+ errors = manipulator.get_validation_errors(new_data)
+ manipulator.do_html2python(new_data)
+
+ if not errors:
+ new_object = manipulator.save(new_data)
+ pk_value = new_object._get_pk_val()
+
+ # Construct the change message.
+ change_message = []
+ if manipulator.fields_added:
+ change_message.append(_('Added %s.') %
get_text_list(manipulator.fields_added, _('and')))
+ if manipulator.fields_changed:
+ change_message.append(_('Changed %s.') %
get_text_list(manipulator.fields_changed, _('and')))
+ if manipulator.fields_deleted:
+ change_message.append(_('Deleted %s.') %
get_text_list(manipulator.fields_deleted, _('and')))
+ change_message = ' '.join(change_message)
+ if not change_message:
+ change_message = _('No fields changed.')
+ LogEntry.objects.log_action(request.user.id,
ContentType.objects.get_for_model(model).id, pk_value, str(new_object), CHANGE,
change_message)
+
+ msg = _('The %(name)s "%(obj)s" was changed successfully.') %
{'name': opts.verbose_name, 'obj': new_object}
+ if request.POST.has_key("_continue"):
+ request.user.message_set.create(message=msg + ' ' + _("You may
edit it again below."))
+ if request.REQUEST.has_key('_popup'):
+ return HttpResponseRedirect(request.path + "?_popup=1")
+ else:
+ return HttpResponseRedirect(request.path)
+ elif request.POST.has_key("_saveasnew"):
+ request.user.message_set.create(message=_('The %(name)s
"%(obj)s" was added successfully. You may edit it again below.') % {'name':
opts.verbose_name, 'obj': new_object})
+ return HttpResponseRedirect("../%s/" % pk_value)
+ elif request.POST.has_key("_addanother"):
+ request.user.message_set.create(message=msg + ' ' + (_("You may
add another %s below.") % opts.verbose_name))
+ return HttpResponseRedirect("../add/")
+ else:
+ request.user.message_set.create(message=msg)
+ return HttpResponseRedirect("../")
+ else:
+ # Populate new_data with a "flattened" version of the current data.
+ new_data = manipulator.flatten_data()
+
+ # TODO: do this in flatten_data...
+ # If the object has ordered objects on its admin page, get the
existing
+ # order and flatten it into a comma-separated list of IDs.
+ id_order_list = []
+ for rel_obj in opts.get_ordered_objects():
+ id_order_list.extend(getattr(manipulator.original_object,
'get_%s_order' % rel_obj.object_name.lower())())
+ if id_order_list:
+ new_data['order_'] = ','.join(map(str, id_order_list))
+ errors = {}
+
+ # Populate the FormWrapper.
+ form = oldforms.FormWrapper(manipulator, new_data, errors)
+ form.original = manipulator.original_object
+ form.order_objects = []
+
+ # TODO: Should be done in flatten_data / FormWrapper construction
+ for related in opts.get_followed_related_objects():
+ wrt = related.opts.order_with_respect_to
+ if wrt and wrt.rel and wrt.rel.to == opts:
+ func = getattr(manipulator.original_object, 'get_%s_list' %
+ related.get_accessor_name())
+ orig_list = func()
+ form.order_objects.extend(orig_list)
+
+ c = template.RequestContext(request, {
+ 'title': _('Change %s') % opts.verbose_name,
+ 'form': form,
+ 'object_id': object_id,
+ 'original': manipulator.original_object,
+ 'is_popup': request.REQUEST.has_key('_popup'),
+ })
+ return render_change_form(model, manipulator, c, change=True)
+
def change_list_view(self, request):
"The 'change list' admin view for this model."
opts = self.model._meta
@@ -414,105 +506,6 @@
return render_change_form(model, manipulator, c, add=True)
add_stage = staff_member_required(never_cache(add_stage))
-def change_stage(request, app_label, model_name, object_id):
- model = models.get_model(app_label, model_name)
- object_id = unquote(object_id)
- if model is None:
- raise Http404("App %r, model %r, not found" % (app_label, model_name))
- opts = model._meta
-
- if not request.user.has_perm(app_label + '.' +
opts.get_change_permission()):
- raise PermissionDenied
-
- if request.POST and request.POST.has_key("_saveasnew"):
- return add_stage(request, app_label, model_name, form_url='../../add/')
-
- try:
- manipulator = model.ChangeManipulator(object_id)
- except model.DoesNotExist:
- raise Http404('%s object with primary key %r does not exist' %
(model_name, escape(object_id)))
-
- if request.POST:
- new_data = request.POST.copy()
-
- if opts.has_field_type(models.FileField):
- new_data.update(request.FILES)
-
- errors = manipulator.get_validation_errors(new_data)
- manipulator.do_html2python(new_data)
-
- if not errors:
- new_object = manipulator.save(new_data)
- pk_value = new_object._get_pk_val()
-
- # Construct the change message.
- change_message = []
- if manipulator.fields_added:
- change_message.append(_('Added %s.') %
get_text_list(manipulator.fields_added, _('and')))
- if manipulator.fields_changed:
- change_message.append(_('Changed %s.') %
get_text_list(manipulator.fields_changed, _('and')))
- if manipulator.fields_deleted:
- change_message.append(_('Deleted %s.') %
get_text_list(manipulator.fields_deleted, _('and')))
- change_message = ' '.join(change_message)
- if not change_message:
- change_message = _('No fields changed.')
- LogEntry.objects.log_action(request.user.id,
ContentType.objects.get_for_model(model).id, pk_value, str(new_object), CHANGE,
change_message)
-
- msg = _('The %(name)s "%(obj)s" was changed successfully.') %
{'name': opts.verbose_name, 'obj': new_object}
- if request.POST.has_key("_continue"):
- request.user.message_set.create(message=msg + ' ' + _("You may edit
it again below."))
- if request.REQUEST.has_key('_popup'):
- return HttpResponseRedirect(request.path + "?_popup=1")
- else:
- return HttpResponseRedirect(request.path)
- elif request.POST.has_key("_saveasnew"):
- request.user.message_set.create(message=_('The %(name)s
"%(obj)s" was added successfully. You may edit it again below.') % {'name':
opts.verbose_name, 'obj': new_object})
- return HttpResponseRedirect("../%s/" % pk_value)
- elif request.POST.has_key("_addanother"):
- request.user.message_set.create(message=msg + ' ' + (_("You may add
another %s below.") % opts.verbose_name))
- return HttpResponseRedirect("../add/")
- else:
- request.user.message_set.create(message=msg)
- return HttpResponseRedirect("../")
- else:
- # Populate new_data with a "flattened" version of the current data.
- new_data = manipulator.flatten_data()
-
- # TODO: do this in flatten_data...
- # If the object has ordered objects on its admin page, get the existing
- # order and flatten it into a comma-separated list of IDs.
-
- id_order_list = []
- for rel_obj in opts.get_ordered_objects():
- id_order_list.extend(getattr(manipulator.original_object,
'get_%s_order' % rel_obj.object_name.lower())())
- if id_order_list:
- new_data['order_'] = ','.join(map(str, id_order_list))
- errors = {}
-
- # Populate the FormWrapper.
- form = oldforms.FormWrapper(manipulator, new_data, errors)
- form.original = manipulator.original_object
- form.order_objects = []
-
- #TODO Should be done in flatten_data / FormWrapper construction
- for related in opts.get_followed_related_objects():
- wrt = related.opts.order_with_respect_to
- if wrt and wrt.rel and wrt.rel.to == opts:
- func = getattr(manipulator.original_object, 'get_%s_list' %
- related.get_accessor_name())
- orig_list = func()
- form.order_objects.extend(orig_list)
-
- c = template.RequestContext(request, {
- 'title': _('Change %s') % opts.verbose_name,
- 'form': form,
- 'object_id': object_id,
- 'original': manipulator.original_object,
- 'is_popup': request.REQUEST.has_key('_popup'),
- })
- return render_change_form(model, manipulator, c, change=True)
-change_stage = staff_member_required(never_cache(change_stage))
-
def _nest_help(obj, depth, val):
current = obj
for i in range(depth):
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Django
updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---