Updated contrib.admin to use Email/URLInputs; refs #16630
This commit is contained in:
parent
7cca8d56d2
commit
2a979d2a7b
|
@ -69,6 +69,7 @@ FORMFIELD_FOR_DBFIELD_DEFAULTS = {
|
|||
models.CharField: {'widget': widgets.AdminTextInputWidget},
|
||||
models.ImageField: {'widget': widgets.AdminFileWidget},
|
||||
models.FileField: {'widget': widgets.AdminFileWidget},
|
||||
models.EmailField: {'widget': widgets.AdminEmailInputWidget},
|
||||
}
|
||||
|
||||
csrf_protect_m = method_decorator(csrf_protect)
|
||||
|
|
|
@ -285,7 +285,14 @@ class AdminTextInputWidget(forms.TextInput):
|
|||
final_attrs.update(attrs)
|
||||
super(AdminTextInputWidget, self).__init__(attrs=final_attrs)
|
||||
|
||||
class AdminURLFieldWidget(forms.TextInput):
|
||||
class AdminEmailInputWidget(forms.EmailInput):
|
||||
def __init__(self, attrs=None):
|
||||
final_attrs = {'class': 'vTextField'}
|
||||
if attrs is not None:
|
||||
final_attrs.update(attrs)
|
||||
super(AdminEmailInputWidget, self).__init__(attrs=final_attrs)
|
||||
|
||||
class AdminURLFieldWidget(forms.URLInput):
|
||||
def __init__(self, attrs=None):
|
||||
final_attrs = {'class': 'vURLField'}
|
||||
if attrs is not None:
|
||||
|
|
|
@ -13,6 +13,7 @@ class Member(models.Model):
|
|||
name = models.CharField(max_length=100)
|
||||
birthdate = models.DateTimeField(blank=True, null=True)
|
||||
gender = models.CharField(max_length=1, blank=True, choices=[('M','Male'), ('F', 'Female')])
|
||||
email = models.EmailField(blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
|
|
@ -83,6 +83,9 @@ class AdminFormfieldForDBFieldTests(TestCase):
|
|||
def testCharField(self):
|
||||
self.assertFormfield(models.Member, 'name', widgets.AdminTextInputWidget)
|
||||
|
||||
def testEmailField(self):
|
||||
self.assertFormfield(models.Member, 'email', widgets.AdminEmailInputWidget)
|
||||
|
||||
def testFileField(self):
|
||||
self.assertFormfield(models.Album, 'cover_art', widgets.AdminFileWidget)
|
||||
|
||||
|
@ -300,29 +303,29 @@ class AdminURLWidgetTest(DjangoTestCase):
|
|||
w = widgets.AdminURLFieldWidget()
|
||||
self.assertHTMLEqual(
|
||||
conditional_escape(w.render('test', '')),
|
||||
'<input class="vURLField" name="test" type="text" />'
|
||||
'<input class="vURLField" name="test" type="url" />'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
conditional_escape(w.render('test', 'http://example.com')),
|
||||
'<p class="url">Currently:<a href="http://example.com">http://example.com</a><br />Change:<input class="vURLField" name="test" type="text" value="http://example.com" /></p>'
|
||||
'<p class="url">Currently:<a href="http://example.com">http://example.com</a><br />Change:<input class="vURLField" name="test" type="url" value="http://example.com" /></p>'
|
||||
)
|
||||
|
||||
def test_render_idn(self):
|
||||
w = widgets.AdminURLFieldWidget()
|
||||
self.assertHTMLEqual(
|
||||
conditional_escape(w.render('test', 'http://example-äüö.com')),
|
||||
'<p class="url">Currently:<a href="http://xn--example--7za4pnc.com">http://example-äüö.com</a><br />Change:<input class="vURLField" name="test" type="text" value="http://example-äüö.com" /></p>'
|
||||
'<p class="url">Currently:<a href="http://xn--example--7za4pnc.com">http://example-äüö.com</a><br />Change:<input class="vURLField" name="test" type="url" value="http://example-äüö.com" /></p>'
|
||||
)
|
||||
|
||||
def test_render_quoting(self):
|
||||
w = widgets.AdminURLFieldWidget()
|
||||
self.assertHTMLEqual(
|
||||
conditional_escape(w.render('test', 'http://example.com/<sometag>some text</sometag>')),
|
||||
'<p class="url">Currently:<a href="http://example.com/%3Csometag%3Esome%20text%3C/sometag%3E">http://example.com/<sometag>some text</sometag></a><br />Change:<input class="vURLField" name="test" type="text" value="http://example.com/<sometag>some text</sometag>" /></p>'
|
||||
'<p class="url">Currently:<a href="http://example.com/%3Csometag%3Esome%20text%3C/sometag%3E">http://example.com/<sometag>some text</sometag></a><br />Change:<input class="vURLField" name="test" type="url" value="http://example.com/<sometag>some text</sometag>" /></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
conditional_escape(w.render('test', 'http://example-äüö.com/<sometag>some text</sometag>')),
|
||||
'<p class="url">Currently:<a href="http://xn--example--7za4pnc.com/%3Csometag%3Esome%20text%3C/sometag%3E">http://example-äüö.com/<sometag>some text</sometag></a><br />Change:<input class="vURLField" name="test" type="text" value="http://example-äüö.com/<sometag>some text</sometag>" /></p>'
|
||||
'<p class="url">Currently:<a href="http://xn--example--7za4pnc.com/%3Csometag%3Esome%20text%3C/sometag%3E">http://example-äüö.com/<sometag>some text</sometag></a><br />Change:<input class="vURLField" name="test" type="url" value="http://example-äüö.com/<sometag>some text</sometag>" /></p>'
|
||||
)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue