summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Smith <smithdc@gmail.com>2021-08-03 17:27:57 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-08-10 12:49:06 +0200
commit3a6431db5461b88e691d770abdba6a2793ef699d (patch)
tree5ba9f9d47ca0e29e220fca6d0474e460871693dc
parent9b1158a7e0784686bbe5118a88d4804b99fa4fe1 (diff)
Refs #29205 -- Added MultiValueField test for rendering of optional subfields.
-rw-r--r--tests/forms_tests/tests/test_forms.py40
1 files changed, 37 insertions, 3 deletions
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py
index 0fe0749294..212af2ad14 100644
--- a/tests/forms_tests/tests/test_forms.py
+++ b/tests/forms_tests/tests/test_forms.py
@@ -10,9 +10,10 @@ from django.forms import (
BooleanField, CharField, CheckboxSelectMultiple, ChoiceField, DateField,
DateTimeField, EmailField, FileField, FileInput, FloatField, Form,
HiddenInput, ImageField, IntegerField, MultipleChoiceField,
- MultipleHiddenInput, MultiValueField, NullBooleanField, PasswordInput,
- RadioSelect, Select, SplitDateTimeField, SplitHiddenDateTimeWidget,
- Textarea, TextInput, TimeField, ValidationError, forms,
+ MultipleHiddenInput, MultiValueField, MultiWidget, NullBooleanField,
+ PasswordInput, RadioSelect, Select, SplitDateTimeField,
+ SplitHiddenDateTimeWidget, Textarea, TextInput, TimeField, ValidationError,
+ forms,
)
from django.forms.renderers import DjangoTemplates, get_default_renderer
from django.forms.utils import ErrorList
@@ -3102,6 +3103,39 @@ Good luck picking a username that doesn&#x27;t already exist.</p>
with self.assertRaisesMessage(ValidationError, "'Enter a valid country code.'"):
f.clean(['61', '287654321', '123', 'Home'])
+ def test_multivalue_optional_subfields_rendering(self):
+ class PhoneWidget(MultiWidget):
+ def __init__(self, attrs=None):
+ widgets = [TextInput(), TextInput()]
+ super().__init__(widgets, attrs)
+
+ def decompress(self, value):
+ return [None, None]
+
+ class PhoneField(MultiValueField):
+ def __init__(self, *args, **kwargs):
+ fields = [CharField(), CharField(required=False)]
+ super().__init__(fields, *args, **kwargs)
+
+ class PhoneForm(Form):
+ phone1 = PhoneField(widget=PhoneWidget)
+ phone2 = PhoneField(widget=PhoneWidget, required=False)
+ phone3 = PhoneField(widget=PhoneWidget, require_all_fields=False)
+ phone4 = PhoneField(
+ widget=PhoneWidget, required=False, require_all_fields=False,
+ )
+
+ form = PhoneForm(auto_id=False)
+ self.assertHTMLEqual(
+ form.as_p(),
+ """
+ <p>Phone1:<input type="text" name="phone1_0" required><input type="text" name="phone1_1" required></p>
+ <p>Phone2:<input type="text" name="phone2_0"><input type="text" name="phone2_1"></p>
+ <p>Phone3:<input type="text" name="phone3_0" required><input type="text" name="phone3_1"></p>
+ <p>Phone4:<input type="text" name="phone4_0"><input type="text" name="phone4_1"></p>
+ """,
+ )
+
def test_custom_empty_values(self):
"""
Form fields can customize what is considered as an empty value