mirror of https://github.com/django/django.git
Refs #29205 -- Added MultiValueField test for rendering of optional subfields.
This commit is contained in:
parent
9b1158a7e0
commit
3a6431db54
|
@ -10,9 +10,10 @@ from django.forms import (
|
||||||
BooleanField, CharField, CheckboxSelectMultiple, ChoiceField, DateField,
|
BooleanField, CharField, CheckboxSelectMultiple, ChoiceField, DateField,
|
||||||
DateTimeField, EmailField, FileField, FileInput, FloatField, Form,
|
DateTimeField, EmailField, FileField, FileInput, FloatField, Form,
|
||||||
HiddenInput, ImageField, IntegerField, MultipleChoiceField,
|
HiddenInput, ImageField, IntegerField, MultipleChoiceField,
|
||||||
MultipleHiddenInput, MultiValueField, NullBooleanField, PasswordInput,
|
MultipleHiddenInput, MultiValueField, MultiWidget, NullBooleanField,
|
||||||
RadioSelect, Select, SplitDateTimeField, SplitHiddenDateTimeWidget,
|
PasswordInput, RadioSelect, Select, SplitDateTimeField,
|
||||||
Textarea, TextInput, TimeField, ValidationError, forms,
|
SplitHiddenDateTimeWidget, Textarea, TextInput, TimeField, ValidationError,
|
||||||
|
forms,
|
||||||
)
|
)
|
||||||
from django.forms.renderers import DjangoTemplates, get_default_renderer
|
from django.forms.renderers import DjangoTemplates, get_default_renderer
|
||||||
from django.forms.utils import ErrorList
|
from django.forms.utils import ErrorList
|
||||||
|
@ -3102,6 +3103,39 @@ Good luck picking a username that doesn't already exist.</p>
|
||||||
with self.assertRaisesMessage(ValidationError, "'Enter a valid country code.'"):
|
with self.assertRaisesMessage(ValidationError, "'Enter a valid country code.'"):
|
||||||
f.clean(['61', '287654321', '123', 'Home'])
|
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):
|
def test_custom_empty_values(self):
|
||||||
"""
|
"""
|
||||||
Form fields can customize what is considered as an empty value
|
Form fields can customize what is considered as an empty value
|
||||||
|
|
Loading…
Reference in New Issue