Defer validation when saving snippets as draft

pull/12964/head
Matt Westcott 2025-03-01 02:27:29 +00:00 zatwierdzone przez Matt Westcott
rodzic 0745ae53da
commit f649856cf4
1 zmienionych plików z 18 dodań i 2 usunięć
wagtail/admin/views/generic

Wyświetl plik

@ -17,6 +17,7 @@ from django.utils.translation import gettext as _
from wagtail import hooks
from wagtail.admin import messages
from wagtail.admin.forms.models import WagtailAdminModelForm
from wagtail.admin.models import EditingSession
from wagtail.admin.templatetags.wagtailadmin_tags import user_display_name
from wagtail.admin.ui.editing_sessions import EditingSessionsModule
@ -254,6 +255,11 @@ class CreateEditViewOptionalFeaturesMixin:
self.lock = self.get_lock()
self.locked_for_user = self.lock and self.lock.for_user(request.user)
super().setup(request, *args, **kwargs)
self.saving_as_draft = (
self.draftstate_enabled
and request.method == "POST"
and self.action in ("create", "edit")
)
@cached_property
def workflow(self):
@ -502,7 +508,9 @@ class CreateEditViewOptionalFeaturesMixin:
# Save revision if the model inherits from RevisionMixin
self.new_revision = None
if self.revision_enabled:
self.new_revision = instance.save_revision(user=self.request.user)
self.new_revision = instance.save_revision(
user=self.request.user, clean=not self.saving_as_draft
)
log(
instance=instance,
@ -735,8 +743,16 @@ class CreateEditViewOptionalFeaturesMixin:
def post(self, request, *args, **kwargs):
form = self.get_form()
# Make sure object is not locked
if not self.locked_for_user and form.is_valid():
if self.locked_for_user:
return self.form_invalid(form)
# If saving as draft, do not enforce full validation
if self.saving_as_draft and isinstance(form, WagtailAdminModelForm):
form.defer_required_fields()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)