kopia lustrzana https://github.com/wagtail/wagtail
Add mechanism for deferring required field validation on WagtailAdminModelForm
rodzic
8f640a8cdb
commit
8cdbbcfe29
|
@ -103,7 +103,10 @@ def formfield_for_dbfield(db_field, **kwargs):
|
|||
class WagtailAdminModelFormOptions(PermissionedFormOptionsMixin, ClusterFormOptions):
|
||||
# Container for the options set in the inner 'class Meta' of a model form, supporting
|
||||
# extensions for both ClusterForm ('formsets') and PermissionedForm ('field_permissions').
|
||||
pass
|
||||
|
||||
def __init__(self, options=None):
|
||||
super().__init__(options)
|
||||
self.defer_required_on_fields = getattr(options, "defer_required_on_fields", [])
|
||||
|
||||
|
||||
class WagtailAdminModelFormMetaclass(PermissionedFormMetaclass, ClusterFormMetaclass):
|
||||
|
@ -125,6 +128,13 @@ class WagtailAdminModelForm(
|
|||
self.for_user = kwargs.get("for_user")
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def defer_required_fields(self):
|
||||
for field_name in self._meta.defer_required_on_fields:
|
||||
try:
|
||||
self.fields[field_name].required = False
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
class Meta:
|
||||
formfield_callback = formfield_for_dbfield
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@ from django.forms.fields import CharField
|
|||
from django.test import SimpleTestCase, TestCase
|
||||
|
||||
from wagtail.admin.forms.auth import LoginForm, PasswordResetForm
|
||||
from wagtail.admin.forms.models import WagtailAdminModelForm
|
||||
from wagtail.test.testapp.models import Advert
|
||||
|
||||
|
||||
class CustomLoginForm(LoginForm):
|
||||
|
@ -28,3 +30,29 @@ class TestPasswordResetForm(SimpleTestCase):
|
|||
def test_extra_fields(self):
|
||||
form = CustomPasswordResetForm()
|
||||
self.assertEqual(list(form.extra_fields), [("captcha", form["captcha"])])
|
||||
|
||||
|
||||
class TestDeferRequiredFields(TestCase):
|
||||
def test_defer_required_fields(self):
|
||||
class AdvertForm(WagtailAdminModelForm):
|
||||
class Meta:
|
||||
model = Advert
|
||||
fields = ["url", "text"]
|
||||
defer_required_on_fields = ["text"]
|
||||
|
||||
form = AdvertForm(
|
||||
{
|
||||
"url": "https://www.example.com",
|
||||
"text": "",
|
||||
}
|
||||
)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
form = AdvertForm(
|
||||
{
|
||||
"url": "https://www.example.com",
|
||||
"text": "",
|
||||
}
|
||||
)
|
||||
form.defer_required_fields()
|
||||
self.assertTrue(form.is_valid())
|
||||
|
|
Ładowanie…
Reference in New Issue