kopia lustrzana https://github.com/wagtail/wagtail
Support deferring validation on StreamField
rodzic
5015eddef3
commit
397edf2ec5
|
@ -69,7 +69,8 @@ class FieldPanel(Panel):
|
|||
else:
|
||||
required_on_save = getattr(db_field, "required_on_save", False) or (
|
||||
db_field.null is False
|
||||
and db_field.get_internal_type() not in ("CharField", "TextField")
|
||||
and db_field.get_internal_type()
|
||||
not in ("CharField", "TextField", "JSONField")
|
||||
)
|
||||
|
||||
if not required_on_save:
|
||||
|
|
|
@ -32,6 +32,7 @@ from wagtail.test.testapp.models import (
|
|||
StandardIndex,
|
||||
)
|
||||
from wagtail.test.utils import WagtailTestUtils
|
||||
from wagtail.test.utils.form_data import nested_form_data, streamfield
|
||||
from wagtail.test.utils.timestamps import submittable_timestamp
|
||||
|
||||
|
||||
|
@ -755,6 +756,68 @@ class TestPageCreation(WagtailTestUtils, TestCase):
|
|||
).exists()
|
||||
)
|
||||
|
||||
def test_create_streampage_post_with_blank_body(self):
|
||||
post_data = nested_form_data(
|
||||
{
|
||||
"title": "Stream page",
|
||||
"slug": "stream-page",
|
||||
"body": streamfield([]),
|
||||
}
|
||||
)
|
||||
response = self.client.post(
|
||||
reverse(
|
||||
"wagtailadmin_pages:add",
|
||||
args=("tests", "streampage", self.root_page.id),
|
||||
),
|
||||
post_data,
|
||||
)
|
||||
# Find the page and check it
|
||||
page = Page.objects.get(
|
||||
path__startswith=self.root_page.path, slug="stream-page"
|
||||
).specific
|
||||
|
||||
# Should be redirected to edit page
|
||||
self.assertRedirects(
|
||||
response, reverse("wagtailadmin_pages:edit", args=(page.id,))
|
||||
)
|
||||
|
||||
self.assertEqual(len(page.body), 0)
|
||||
self.assertFalse(page.live)
|
||||
|
||||
def test_cannot_publish_streampage_with_blank_body(self):
|
||||
post_data = nested_form_data(
|
||||
{
|
||||
"title": "Stream page",
|
||||
"slug": "stream-page",
|
||||
"body": streamfield([]),
|
||||
"action-publish": "Publish",
|
||||
}
|
||||
)
|
||||
response = self.client.post(
|
||||
reverse(
|
||||
"wagtailadmin_pages:add",
|
||||
args=("tests", "streampage", self.root_page.id),
|
||||
),
|
||||
post_data,
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# Check that a form error was raised. The actual message as rendered
|
||||
# ("This field is required.") is passed to the StreamBlock as part of
|
||||
# StreamBlockValidationError.non_block_errors, whereas assertFormError
|
||||
# only considers the message attribute (which is a generic error).
|
||||
self.assertFormError(
|
||||
response.context["form"], "body", "Validation error in StreamBlock"
|
||||
)
|
||||
self.assertContains(response, "This field is required.")
|
||||
|
||||
# Page should not have been created
|
||||
self.assertFalse(
|
||||
Page.objects.filter(
|
||||
path__startswith=self.root_page.path, slug="stream-page"
|
||||
).exists()
|
||||
)
|
||||
|
||||
def test_create_simplepage_scheduled(self):
|
||||
go_live_at = timezone.now() + datetime.timedelta(days=1)
|
||||
expire_at = timezone.now() + datetime.timedelta(days=2)
|
||||
|
|
|
@ -756,6 +756,9 @@ class BlockField(forms.Field):
|
|||
super().__init__(**kwargs)
|
||||
|
||||
def clean(self, value):
|
||||
# Pass required flag to the top-level block, so that dynamically setting it on the
|
||||
# field (e.g. by defer_required_fields) is respected by the block.
|
||||
self.block.set_meta_options({"required": self.required})
|
||||
return self.block.clean(value)
|
||||
|
||||
def has_changed(self, initial_value, data_value):
|
||||
|
|
Ładowanie…
Reference in New Issue