mirror of
https://github.com/django/django.git
synced 2025-10-24 22:26:08 +00:00
Fixed #23387 -- Kept "Save as new" button after validation errors in admin.
When "Save as new" is chosen and errors occur, only show the "Save as new" button and not the other save buttons. Thanks to Tino de Bruijn for doing the real work on this fix.
This commit is contained in:
committed by
Tim Graham
parent
a2c3c2a1e2
commit
0894643e40
@@ -1342,9 +1342,8 @@ class ModelAdmin(BaseModelAdmin):
|
||||
'name': force_text(opts.verbose_name), 'key': escape(object_id)})
|
||||
|
||||
if request.method == 'POST' and "_saveasnew" in request.POST:
|
||||
return self.add_view(request, form_url=reverse('admin:%s_%s_add' % (
|
||||
opts.app_label, opts.model_name),
|
||||
current_app=self.admin_site.name))
|
||||
object_id = None
|
||||
obj = None
|
||||
|
||||
ModelForm = self.get_form(request, obj)
|
||||
if request.method == 'POST':
|
||||
@@ -1366,6 +1365,8 @@ class ModelAdmin(BaseModelAdmin):
|
||||
else:
|
||||
self.log_change(request, new_object, change_message)
|
||||
return self.response_change(request, new_object)
|
||||
else:
|
||||
form_validated = False
|
||||
else:
|
||||
if add:
|
||||
initial = self.get_changeform_initial_data(request)
|
||||
@@ -1401,6 +1402,12 @@ class ModelAdmin(BaseModelAdmin):
|
||||
preserved_filters=self.get_preserved_filters(request),
|
||||
)
|
||||
|
||||
# Hide the "Save" and "Save and continue" buttons if "Save as New" was
|
||||
# previously chosen to prevent the interface from getting confusing.
|
||||
if request.method == 'POST' and not form_validated and "_saveasnew" in request.POST:
|
||||
context['show_save'] = False
|
||||
context['show_save_and_continue'] = False
|
||||
|
||||
context.update(extra_context or {})
|
||||
|
||||
return self.render_change_form(request, context, add=add, change=not add, obj=obj, form_url=form_url)
|
||||
|
||||
@@ -30,6 +30,8 @@ def submit_row(context):
|
||||
change = context['change']
|
||||
is_popup = context['is_popup']
|
||||
save_as = context['save_as']
|
||||
show_save = context.get('show_save', True)
|
||||
show_save_and_continue = context.get('show_save_and_continue', True)
|
||||
ctx = {
|
||||
'opts': opts,
|
||||
'show_delete_link': (
|
||||
@@ -41,9 +43,9 @@ def submit_row(context):
|
||||
context['has_add_permission'] and not is_popup and
|
||||
(not save_as or context['add'])
|
||||
),
|
||||
'show_save_and_continue': not is_popup and context['has_change_permission'],
|
||||
'show_save_and_continue': not is_popup and context['has_change_permission'] and show_save_and_continue,
|
||||
'is_popup': is_popup,
|
||||
'show_save': True,
|
||||
'show_save': show_save,
|
||||
'preserved_filters': context.get('preserved_filters'),
|
||||
}
|
||||
if context.get('original') is not None:
|
||||
|
||||
Reference in New Issue
Block a user