mirror of
https://github.com/django/django.git
synced 2025-07-05 02:09:13 +00:00
newforms-admin: Added save_add() and save_change() hooks for ModelAdmin
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@4568 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
8f1fb6da3a
commit
ced8ae1877
@ -265,34 +265,15 @@ class ModelAdmin(object):
|
|||||||
def change_list_queryset(self, request):
|
def change_list_queryset(self, request):
|
||||||
return self.model._default_manager.get_query_set()
|
return self.model._default_manager.get_query_set()
|
||||||
|
|
||||||
def add_view(self, request, form_url='', post_url_continue='../%s/'):
|
def save_add(self, request, model, form, post_url_continue):
|
||||||
"The 'add' admin view for this model."
|
"""
|
||||||
from django.contrib.admin.views.main import render_change_form
|
Saves the object in the "add" stage and returns an HttpResponseRedirect.
|
||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
|
`form` is a bound Form instance that's verified to be valid.
|
||||||
|
"""
|
||||||
from django.contrib.admin.models import LogEntry, ADDITION
|
from django.contrib.admin.models import LogEntry, ADDITION
|
||||||
model = self.model
|
from django.contrib.contenttypes.models import ContentType
|
||||||
opts = model._meta
|
opts = model._meta
|
||||||
app_label = opts.app_label
|
|
||||||
|
|
||||||
if not self.has_add_permission(request):
|
|
||||||
raise PermissionDenied
|
|
||||||
|
|
||||||
if self.has_change_permission(request, None):
|
|
||||||
# redirect to list view
|
|
||||||
post_url = '../'
|
|
||||||
else:
|
|
||||||
# Object list will give 'Permission Denied', so go back to admin home
|
|
||||||
post_url = '../../../'
|
|
||||||
|
|
||||||
ModelForm = forms.form_for_model(model, formfield_callback=self.formfield_for_dbfield)
|
|
||||||
|
|
||||||
if request.POST:
|
|
||||||
new_data = request.POST.copy()
|
|
||||||
if opts.has_field_type(models.FileField):
|
|
||||||
new_data.update(request.FILES)
|
|
||||||
form = ModelForm(new_data)
|
|
||||||
|
|
||||||
if form.is_valid():
|
|
||||||
new_object = form.save(commit=True)
|
new_object = form.save(commit=True)
|
||||||
pk_value = new_object._get_pk_val()
|
pk_value = new_object._get_pk_val()
|
||||||
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, str(new_object), ADDITION)
|
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, str(new_object), ADDITION)
|
||||||
@ -315,49 +296,16 @@ class ModelAdmin(object):
|
|||||||
else:
|
else:
|
||||||
request.user.message_set.create(message=msg)
|
request.user.message_set.create(message=msg)
|
||||||
return HttpResponseRedirect(post_url)
|
return HttpResponseRedirect(post_url)
|
||||||
else:
|
|
||||||
form = ModelForm(initial=request.GET)
|
|
||||||
|
|
||||||
c = template.RequestContext(request, {
|
def save_change(self, request, model, form):
|
||||||
'title': _('Add %s') % opts.verbose_name,
|
"""
|
||||||
'adminform': AdminForm(form, self.fieldsets_add(request), self.prepopulated_fields),
|
Saves the object in the "change" stage and returns an HttpResponseRedirect.
|
||||||
'oldform': oldforms.FormWrapper(model.AddManipulator(), {}, {}),
|
|
||||||
'is_popup': request.REQUEST.has_key('_popup'),
|
|
||||||
'show_delete': False,
|
|
||||||
'javascript_imports': self.javascript_add(request),
|
|
||||||
})
|
|
||||||
|
|
||||||
return render_change_form(self, model, model.AddManipulator(), c, add=True)
|
`form` is a bound Form instance that's verified to be valid.
|
||||||
|
"""
|
||||||
def change_view(self, request, object_id):
|
|
||||||
"The 'change' admin view for this model."
|
|
||||||
from django.contrib.admin.views.main import render_change_form
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
|
||||||
from django.contrib.admin.models import LogEntry, CHANGE
|
from django.contrib.admin.models import LogEntry, CHANGE
|
||||||
model = self.model
|
from django.contrib.contenttypes.models import ContentType
|
||||||
opts = model._meta
|
opts = model._meta
|
||||||
app_label = opts.app_label
|
|
||||||
|
|
||||||
if not self.has_change_permission(request, object_id):
|
|
||||||
raise PermissionDenied
|
|
||||||
|
|
||||||
if request.POST and request.POST.has_key("_saveasnew"):
|
|
||||||
return self.add_view(request, form_url='../../add/')
|
|
||||||
|
|
||||||
try:
|
|
||||||
obj = model._default_manager.get(pk=object_id)
|
|
||||||
except model.DoesNotExist:
|
|
||||||
raise Http404('%s object with primary key %r does not exist.' % (opts.verbose_name, escape(object_id)))
|
|
||||||
|
|
||||||
ModelForm = forms.form_for_instance(obj, formfield_callback=self.formfield_for_dbfield)
|
|
||||||
|
|
||||||
if request.POST:
|
|
||||||
new_data = request.POST.copy()
|
|
||||||
if opts.has_field_type(models.FileField):
|
|
||||||
new_data.update(request.FILES)
|
|
||||||
form = ModelForm(new_data)
|
|
||||||
|
|
||||||
if form.is_valid():
|
|
||||||
new_object = form.save(commit=True)
|
new_object = form.save(commit=True)
|
||||||
pk_value = new_object._get_pk_val()
|
pk_value = new_object._get_pk_val()
|
||||||
|
|
||||||
@ -392,6 +340,74 @@ class ModelAdmin(object):
|
|||||||
else:
|
else:
|
||||||
request.user.message_set.create(message=msg)
|
request.user.message_set.create(message=msg)
|
||||||
return HttpResponseRedirect("../")
|
return HttpResponseRedirect("../")
|
||||||
|
|
||||||
|
def add_view(self, request, form_url=''):
|
||||||
|
"The 'add' admin view for this model."
|
||||||
|
from django.contrib.admin.views.main import render_change_form
|
||||||
|
model = self.model
|
||||||
|
opts = model._meta
|
||||||
|
app_label = opts.app_label
|
||||||
|
|
||||||
|
if not self.has_add_permission(request):
|
||||||
|
raise PermissionDenied
|
||||||
|
|
||||||
|
if self.has_change_permission(request, None):
|
||||||
|
# redirect to list view
|
||||||
|
post_url = '../'
|
||||||
|
else:
|
||||||
|
# Object list will give 'Permission Denied', so go back to admin home
|
||||||
|
post_url = '../../../'
|
||||||
|
|
||||||
|
ModelForm = forms.form_for_model(model, formfield_callback=self.formfield_for_dbfield)
|
||||||
|
|
||||||
|
if request.POST:
|
||||||
|
new_data = request.POST.copy()
|
||||||
|
if opts.has_field_type(models.FileField):
|
||||||
|
new_data.update(request.FILES)
|
||||||
|
form = ModelForm(new_data)
|
||||||
|
if form.is_valid():
|
||||||
|
return self.save_add(request, model, form, '../%s/')
|
||||||
|
else:
|
||||||
|
form = ModelForm(initial=request.GET)
|
||||||
|
|
||||||
|
c = template.RequestContext(request, {
|
||||||
|
'title': _('Add %s') % opts.verbose_name,
|
||||||
|
'adminform': AdminForm(form, self.fieldsets_add(request), self.prepopulated_fields),
|
||||||
|
'oldform': oldforms.FormWrapper(model.AddManipulator(), {}, {}),
|
||||||
|
'is_popup': request.REQUEST.has_key('_popup'),
|
||||||
|
'show_delete': False,
|
||||||
|
'javascript_imports': self.javascript_add(request),
|
||||||
|
})
|
||||||
|
return render_change_form(self, model, model.AddManipulator(), c, add=True)
|
||||||
|
|
||||||
|
def change_view(self, request, object_id):
|
||||||
|
"The 'change' admin view for this model."
|
||||||
|
from django.contrib.admin.views.main import render_change_form
|
||||||
|
model = self.model
|
||||||
|
opts = model._meta
|
||||||
|
app_label = opts.app_label
|
||||||
|
|
||||||
|
if not self.has_change_permission(request, object_id):
|
||||||
|
raise PermissionDenied
|
||||||
|
|
||||||
|
if request.POST and request.POST.has_key("_saveasnew"):
|
||||||
|
return self.add_view(request, form_url='../../add/')
|
||||||
|
|
||||||
|
try:
|
||||||
|
obj = model._default_manager.get(pk=object_id)
|
||||||
|
except model.DoesNotExist:
|
||||||
|
raise Http404('%s object with primary key %r does not exist.' % (opts.verbose_name, escape(object_id)))
|
||||||
|
|
||||||
|
ModelForm = forms.form_for_instance(obj, formfield_callback=self.formfield_for_dbfield)
|
||||||
|
|
||||||
|
if request.POST:
|
||||||
|
new_data = request.POST.copy()
|
||||||
|
if opts.has_field_type(models.FileField):
|
||||||
|
new_data.update(request.FILES)
|
||||||
|
form = ModelForm(new_data)
|
||||||
|
|
||||||
|
if form.is_valid():
|
||||||
|
return self.save_change(request, model, form)
|
||||||
else:
|
else:
|
||||||
form = ModelForm()
|
form = ModelForm()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user