diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 8a7483c..67b09d3 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -1181,6 +1181,12 @@ class ModelAdmin(BaseModelAdmin):
             'preserved_filters': self.get_preserved_filters(request),
         }
         context.update(extra_context or {})
+        # Send back to Change form if we get a validation error preventing Save as New
+        if request.method == 'POST' and not form_validated and "_saveasnew" in request.POST:
+            # Hide Save and Save Continue buttons since Save as New was previously chosen and the others are broken.
+            context['show_save'] = False
+            context['show_save_and_continue']  = False
+            return self.render_change_form(request, context, form_url=form_url, change=True)
         return self.render_change_form(request, context, form_url=form_url, add=True)

     @csrf_protect_m
diff --git a/django/contrib/admin/templatetags/admin_modify.py b/django/contrib/admin/templatetags/admin_modify.py
index 98ac1a6..8f7d6fb 100644
--- a/django/contrib/admin/templatetags/admin_modify.py
+++ b/django/contrib/admin/templatetags/admin_modify.py
@@ -28,6 +28,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': (not is_popup and context['has_delete_permission']
@@ -35,9 +37,9 @@ def submit_row(context):
         'show_save_as_new': not is_popup and change and save_as,
         'show_save_and_add_another': 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:
