summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDavid Smith <smithdc@gmail.com>2022-05-05 14:26:09 +0200
committerCarlton Gibson <carlton.gibson@noumenal.es>2022-05-17 11:16:54 +0200
commitd126eba3637d84caa80fa4258e2e59ef07a8260c (patch)
treee135d40a0934710bae8dcb7e912b49695e600adb /tests
parent6af8673255ad2aca01097db9a8c64dc6b31678c0 (diff)
Refs #32339 -- Deprecated default.html form template.
Co-authored-by: Carlton Gibson <carlton.gibson@noumenal.es>
Diffstat (limited to 'tests')
-rw-r--r--tests/forms_tests/tests/__init__.py4
-rw-r--r--tests/forms_tests/tests/test_forms.py99
-rw-r--r--tests/forms_tests/tests/test_formsets.py100
-rw-r--r--tests/model_forms/tests.py117
-rw-r--r--tests/postgres_tests/test_array.py14
-rw-r--r--tests/postgres_tests/test_ranges.py22
-rwxr-xr-xtests/runtests.py3
7 files changed, 188 insertions, 171 deletions
diff --git a/tests/forms_tests/tests/__init__.py b/tests/forms_tests/tests/__init__.py
index 193a7149a1..1878eaf6e5 100644
--- a/tests/forms_tests/tests/__init__.py
+++ b/tests/forms_tests/tests/__init__.py
@@ -11,6 +11,8 @@ except ImportError:
def jinja2_tests(test_func):
test_func = skipIf(jinja2 is None, "this test requires jinja2")(test_func)
return override_settings(
- FORM_RENDERER="django.forms.renderers.Jinja2",
+ # RemovedInDjango50Warning: When the deprecation ends, revert to
+ # FORM_RENDERER="django.forms.renderers.Jinja2",
+ FORM_RENDERER="django.forms.renderers.Jinja2DivFormRenderer",
TEMPLATES={"BACKEND": "django.template.backends.jinja2.Jinja2"},
)(test_func)
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py
index e6e396c8a1..ec911ee961 100644
--- a/tests/forms_tests/tests/test_forms.py
+++ b/tests/forms_tests/tests/test_forms.py
@@ -42,8 +42,9 @@ from django.forms.utils import ErrorList
from django.http import QueryDict
from django.template import Context, Template
from django.test import SimpleTestCase
-from django.test.utils import override_settings
+from django.test.utils import isolate_lru_cache, override_settings
from django.utils.datastructures import MultiValueDict
+from django.utils.deprecation import RemovedInDjango50Warning
from django.utils.safestring import mark_safe
from . import jinja2_tests
@@ -149,17 +150,12 @@ class FormsTestCase(SimpleTestCase):
)
self.assertHTMLEqual(
str(p),
- """
- <tr><th><label for="id_first_name">First name:</label></th><td>
- <input type="text" name="first_name" value="John" id="id_first_name"
- required></td></tr>
- <tr><th><label for="id_last_name">Last name:</label></th><td>
- <input type="text" name="last_name" value="Lennon" id="id_last_name"
- required></td></tr>
- <tr><th><label for="id_birthday">Birthday:</label></th><td>
- <input type="text" name="birthday" value="1940-10-9" id="id_birthday"
- required></td></tr>
- """,
+ '<div><label for="id_first_name">First name:</label><input type="text" '
+ 'name="first_name" value="John" required id="id_first_name"></div><div>'
+ '<label for="id_last_name">Last name:</label><input type="text" '
+ 'name="last_name" value="Lennon" required id="id_last_name"></div><div>'
+ '<label for="id_birthday">Birthday:</label><input type="text" '
+ 'name="birthday" value="1940-10-9" required id="id_birthday"></div>',
)
self.assertHTMLEqual(
p.as_div(),
@@ -182,15 +178,15 @@ class FormsTestCase(SimpleTestCase):
self.assertEqual(p.cleaned_data, {})
self.assertHTMLEqual(
str(p),
- """<tr><th><label for="id_first_name">First name:</label></th><td>
-<ul class="errorlist"><li>This field is required.</li></ul>
-<input type="text" name="first_name" id="id_first_name" required></td></tr>
-<tr><th><label for="id_last_name">Last name:</label></th>
-<td><ul class="errorlist"><li>This field is required.</li></ul>
-<input type="text" name="last_name" id="id_last_name" required></td></tr>
-<tr><th><label for="id_birthday">Birthday:</label></th><td>
-<ul class="errorlist"><li>This field is required.</li></ul>
-<input type="text" name="birthday" id="id_birthday" required></td></tr>""",
+ '<div><label for="id_first_name">First name:</label>'
+ '<ul class="errorlist"><li>This field is required.</li></ul>'
+ '<input type="text" name="first_name" required id="id_first_name"></div>'
+ '<div><label for="id_last_name">Last name:</label>'
+ '<ul class="errorlist"><li>This field is required.</li></ul>'
+ '<input type="text" name="last_name" required id="id_last_name"></div><div>'
+ '<label for="id_birthday">Birthday:</label>'
+ '<ul class="errorlist"><li>This field is required.</li></ul>'
+ '<input type="text" name="birthday" required id="id_birthday"></div>',
)
self.assertHTMLEqual(
p.as_table(),
@@ -261,12 +257,12 @@ class FormsTestCase(SimpleTestCase):
self.assertHTMLEqual(
str(p),
- """<tr><th><label for="id_first_name">First name:</label></th><td>
-<input type="text" name="first_name" id="id_first_name" required></td></tr>
-<tr><th><label for="id_last_name">Last name:</label></th><td>
-<input type="text" name="last_name" id="id_last_name" required></td></tr>
-<tr><th><label for="id_birthday">Birthday:</label></th><td>
-<input type="text" name="birthday" id="id_birthday" required></td></tr>""",
+ '<div><label for="id_first_name">First name:</label><input type="text" '
+ 'name="first_name" id="id_first_name" required></div><div><label '
+ 'for="id_last_name">Last name:</label><input type="text" name="last_name" '
+ 'id="id_last_name" required></div><div><label for="id_birthday">'
+ 'Birthday:</label><input type="text" name="birthday" id="id_birthday" '
+ "required></div>",
)
self.assertHTMLEqual(
p.as_table(),
@@ -4932,9 +4928,7 @@ class TemplateTests(SimpleTestCase):
t = Template(
'<form method="post">'
- "<table>"
"{{ form }}"
- "</table>"
'<input type="submit" required>'
"</form>"
)
@@ -4944,14 +4938,12 @@ class TemplateTests(SimpleTestCase):
self.assertHTMLEqual(
my_function("GET", {}),
'<form method="post">'
- "<table>"
- "<tr><th>Username:</th><td>"
- '<input type="text" name="username" maxlength="10" required></td></tr>'
- "<tr><th>Password1:</th><td>"
- '<input type="password" name="password1" required></td></tr>'
- "<tr><th>Password2:</th><td>"
- '<input type="password" name="password2" required></td></tr>'
- "</table>"
+ "<div>Username:"
+ '<input type="text" name="username" maxlength="10" required></div>'
+ "<div>Password1:"
+ '<input type="password" name="password1" required></div>'
+ "<div>Password2:"
+ '<input type="password" name="password2" required></div>'
'<input type="submit" required>'
"</form>",
)
@@ -4966,18 +4958,16 @@ class TemplateTests(SimpleTestCase):
},
),
'<form method="post">'
- "<table>"
- '<tr><td colspan="2"><ul class="errorlist nonfield">'
- "<li>Please make sure your passwords match.</li></ul></td></tr>"
- '<tr><th>Username:</th><td><ul class="errorlist">'
+ '<ul class="errorlist nonfield">'
+ "<li>Please make sure your passwords match.</li></ul>"
+ '<div>Username:<ul class="errorlist">'
"<li>Ensure this value has at most 10 characters (it has 23).</li></ul>"
'<input type="text" name="username" '
- 'value="this-is-a-long-username" maxlength="10" required></td></tr>'
- "<tr><th>Password1:</th><td>"
- '<input type="password" name="password1" required></td></tr>'
- "<tr><th>Password2:</th><td>"
- '<input type="password" name="password2" required></td></tr>'
- "</table>"
+ 'value="this-is-a-long-username" maxlength="10" required></div>'
+ "<div>Password1:"
+ '<input type="password" name="password1" required></div>'
+ "<div>Password2:"
+ '<input type="password" name="password2" required></div>'
'<input type="submit" required>'
"</form>",
)
@@ -5054,7 +5044,7 @@ class OverrideTests(SimpleTestCase):
f = FirstNameForm()
try:
- self.assertInHTML("<th>1</th>", f.render())
+ f.render()
except RecursionError:
self.fail("Cyclic reference in BoundField.render().")
@@ -5069,3 +5059,16 @@ class OverrideTests(SimpleTestCase):
'<label for="id_name" class="required">Name:</label>'
'<legend class="required">Language:</legend>',
)
+
+
+class DeprecationTests(SimpleTestCase):
+ def test_warning(self):
+ from django.forms.utils import DEFAULT_TEMPLATE_DEPRECATION_MSG
+
+ with isolate_lru_cache(get_default_renderer), self.settings(
+ FORM_RENDERER="django.forms.renderers.DjangoTemplates"
+ ), self.assertRaisesMessage(
+ RemovedInDjango50Warning, DEFAULT_TEMPLATE_DEPRECATION_MSG
+ ):
+ form = Person()
+ str(form)
diff --git a/tests/forms_tests/tests/test_formsets.py b/tests/forms_tests/tests/test_formsets.py
index 0868b41644..d159409afa 100644
--- a/tests/forms_tests/tests/test_formsets.py
+++ b/tests/forms_tests/tests/test_formsets.py
@@ -23,10 +23,12 @@ from django.forms.formsets import (
all_valid,
formset_factory,
)
-from django.forms.renderers import TemplatesSetting
+from django.forms.renderers import TemplatesSetting, get_default_renderer
from django.forms.utils import ErrorList
from django.forms.widgets import HiddenInput
from django.test import SimpleTestCase
+from django.test.utils import isolate_lru_cache
+from django.utils.deprecation import RemovedInDjango50Warning
from . import jinja2_tests
@@ -125,8 +127,8 @@ class FormsFormsetTestCase(SimpleTestCase):
<input type="hidden" name="choices-INITIAL_FORMS" value="0">
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0">
<input type="hidden" name="choices-MAX_NUM_FORMS" value="1000">
-<tr><th>Choice:</th><td><input type="text" name="choices-0-choice"></td></tr>
-<tr><th>Votes:</th><td><input type="number" name="choices-0-votes"></td></tr>""",
+<div>Choice:<input type="text" name="choices-0-choice"></div>
+<div>Votes:<input type="number" name="choices-0-votes"></div>""",
)
# FormSet are treated similarly to Forms. FormSet has an is_valid()
# method, and a cleaned_data or errors attribute depending on whether
@@ -976,12 +978,12 @@ class FormsFormsetTestCase(SimpleTestCase):
formset = LimitedFavoriteDrinkFormSet()
self.assertHTMLEqual(
"\n".join(str(form) for form in formset.forms),
- """<tr><th><label for="id_form-0-name">Name:</label></th>
-<td><input type="text" name="form-0-name" id="id_form-0-name"></td></tr>
-<tr><th><label for="id_form-1-name">Name:</label></th>
-<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>
-<tr><th><label for="id_form-2-name">Name:</label></th>
-<td><input type="text" name="form-2-name" id="id_form-2-name"></td></tr>""",
+ """<div><label for="id_form-0-name">Name:</label>
+ <input type="text" name="form-0-name" id="id_form-0-name"></div>
+<div><label for="id_form-1-name">Name:</label>
+<input type="text" name="form-1-name" id="id_form-1-name"></div>
+<div><label for="id_form-2-name">Name:</label>
+<input type="text" name="form-2-name" id="id_form-2-name"></div>""",
)
# If max_num is 0 then no form is rendered at all.
LimitedFavoriteDrinkFormSet = formset_factory(
@@ -997,10 +999,10 @@ class FormsFormsetTestCase(SimpleTestCase):
formset = LimitedFavoriteDrinkFormSet()
self.assertHTMLEqual(
"\n".join(str(form) for form in formset.forms),
- """<tr><th><label for="id_form-0-name">Name:</label></th><td>
-<input type="text" name="form-0-name" id="id_form-0-name"></td></tr>
-<tr><th><label for="id_form-1-name">Name:</label></th>
-<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>""",
+ """<div><label for="id_form-0-name">Name:</label>
+<input type="text" name="form-0-name" id="id_form-0-name"></div>
+<div><label for="id_form-1-name">Name:</label>
+<input type="text" name="form-1-name" id="id_form-1-name"></div>""",
)
def test_limiting_extra_lest_than_max_num(self):
@@ -1011,8 +1013,8 @@ class FormsFormsetTestCase(SimpleTestCase):
formset = LimitedFavoriteDrinkFormSet()
self.assertHTMLEqual(
"\n".join(str(form) for form in formset.forms),
- """<tr><th><label for="id_form-0-name">Name:</label></th>
-<td><input type="text" name="form-0-name" id="id_form-0-name"></td></tr>""",
+ """<div><label for="id_form-0-name">Name:</label>
+<input type="text" name="form-0-name" id="id_form-0-name"></div>""",
)
def test_max_num_with_initial_data(self):
@@ -1024,11 +1026,11 @@ class FormsFormsetTestCase(SimpleTestCase):
self.assertHTMLEqual(
"\n".join(str(form) for form in formset.forms),
"""
- <tr><th><label for="id_form-0-name">Name:</label></th>
- <td><input type="text" name="form-0-name" value="Fernet and Coke"
- id="id_form-0-name"></td></tr>
- <tr><th><label for="id_form-1-name">Name:</label></th>
- <td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>
+ <div><label for="id_form-0-name">Name:</label>
+ <input type="text" name="form-0-name" value="Fernet and Coke"
+ id="id_form-0-name"></div>
+ <div><label for="id_form-1-name">Name:</label>
+ <input type="text" name="form-1-name" id="id_form-1-name"></div>
""",
)
@@ -1056,12 +1058,12 @@ class FormsFormsetTestCase(SimpleTestCase):
self.assertHTMLEqual(
"\n".join(str(form) for form in formset.forms),
"""
- <tr><th><label for="id_form-0-name">Name:</label></th>
- <td><input id="id_form-0-name" name="form-0-name" type="text"
- value="Fernet and Coke"></td></tr>
- <tr><th><label for="id_form-1-name">Name:</label></th>
- <td><input id="id_form-1-name" name="form-1-name" type="text"
- value="Bloody Mary"></td></tr>
+ <div><label for="id_form-0-name">Name:</label>
+ <input id="id_form-0-name" name="form-0-name" type="text"
+ value="Fernet and Coke"></div>
+ <div><label for="id_form-1-name">Name:</label>
+ <input id="id_form-1-name" name="form-1-name" type="text"
+ value="Bloody Mary"></div>
""",
)
@@ -1082,18 +1084,15 @@ class FormsFormsetTestCase(SimpleTestCase):
self.assertHTMLEqual(
"\n".join(str(form) for form in formset.forms),
"""
- <tr><th><label for="id_form-0-name">Name:</label></th>
- <td>
+ <div><label for="id_form-0-name">Name:</label>
<input id="id_form-0-name" name="form-0-name" type="text" value="Gin Tonic">
- </td></tr>
- <tr><th><label for="id_form-1-name">Name:</label></th>
- <td>
+ </div>
+ <div><label for="id_form-1-name">Name:</label>
<input id="id_form-1-name" name="form-1-name" type="text"
- value="Bloody Mary"></td></tr>
- <tr><th><label for="id_form-2-name">Name:</label></th>
- <td>
+ value="Bloody Mary"></div>
+ <div><label for="id_form-2-name">Name:</label>
<input id="id_form-2-name" name="form-2-name" type="text"
- value="Jack and Coke"></td></tr>
+ value="Jack and Coke"></div>
""",
)
@@ -1173,12 +1172,11 @@ class FormsFormsetTestCase(SimpleTestCase):
self.assertHTMLEqual(
"\n".join(str(form) for form in formset.forms),
"""
- <tr><th><label for="id_form-0-name">Name:</label></th>
- <td>
+ <div><label for="id_form-0-name">Name:</label>
<input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name">
- </td></tr>
- <tr><th><label for="id_form-1-name">Name:</label></th>
- <td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>""",
+ </div>
+ <div><label for="id_form-1-name">Name:</label>
+ <input type="text" name="form-1-name" id="id_form-1-name"></div>""",
)
def test_management_form_field_names(self):
@@ -1701,16 +1699,16 @@ class TestIsBoundBehavior(SimpleTestCase):
# Can still render the formset.
self.assertHTMLEqual(
str(formset),
- '<tr><td colspan="2">'
'<ul class="errorlist nonfield">'
"<li>(Hidden field TOTAL_FORMS) This field is required.</li>"
"<li>(Hidden field INITIAL_FORMS) This field is required.</li>"
"</ul>"
+ "<div>"
'<input type="hidden" name="form-TOTAL_FORMS" id="id_form-TOTAL_FORMS">'
'<input type="hidden" name="form-INITIAL_FORMS" id="id_form-INITIAL_FORMS">'
'<input type="hidden" name="form-MIN_NUM_FORMS" id="id_form-MIN_NUM_FORMS">'
'<input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS">'
- "</td></tr>\n",
+ "</div>\n",
)
def test_management_form_invalid_data(self):
@@ -1732,18 +1730,18 @@ class TestIsBoundBehavior(SimpleTestCase):
# Can still render the formset.
self.assertHTMLEqual(
str(formset),
- '<tr><td colspan="2">'
'<ul class="errorlist nonfield">'
"<li>(Hidden field TOTAL_FORMS) Enter a whole number.</li>"
"<li>(Hidden field INITIAL_FORMS) Enter a whole number.</li>"
"</ul>"
+ "<div>"
'<input type="hidden" name="form-TOTAL_FORMS" value="two" '
'id="id_form-TOTAL_FORMS">'
'<input type="hidden" name="form-INITIAL_FORMS" value="one" '
'id="id_form-INITIAL_FORMS">'
'<input type="hidden" name="form-MIN_NUM_FORMS" id="id_form-MIN_NUM_FORMS">'
'<input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS">'
- "</td></tr>\n",
+ "</div>\n",
)
def test_customize_management_form_error(self):
@@ -1889,3 +1887,17 @@ class AllValidTests(SimpleTestCase):
]
self.assertEqual(formset1._errors, expected_errors)
self.assertEqual(formset2._errors, expected_errors)
+
+
+class DeprecationTests(SimpleTestCase):
+ def test_warning(self):
+ from django.forms.utils import DEFAULT_TEMPLATE_DEPRECATION_MSG
+
+ with isolate_lru_cache(get_default_renderer), self.settings(
+ FORM_RENDERER="django.forms.renderers.DjangoTemplates"
+ ), self.assertRaisesMessage(
+ RemovedInDjango50Warning, DEFAULT_TEMPLATE_DEPRECATION_MSG
+ ):
+ ChoiceFormSet = formset_factory(Choice)
+ formset = ChoiceFormSet()
+ str(formset)
diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py
index a8617444c5..eb9c2484dc 100644
--- a/tests/model_forms/tests.py
+++ b/tests/model_forms/tests.py
@@ -687,12 +687,12 @@ class ModelFormBaseTest(TestCase):
self.assertHTMLEqual(
str(SubclassMeta()),
- """<tr><th><label for="id_name">Name:</label></th>
-<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr>
-<tr><th><label for="id_slug">Slug:</label></th>
-<td><input id="id_slug" type="text" name="slug" maxlength="20" required></td></tr>
-<tr><th><label for="id_checkbox">Checkbox:</label></th>
-<td><input type="checkbox" name="checkbox" id="id_checkbox" required></td></tr>""",
+ '<div><label for="id_name">Name:</label>'
+ '<input type="text" name="name" maxlength="20" required id="id_name">'
+ '</div><div><label for="id_slug">Slug:</label><input type="text" '
+ 'name="slug" maxlength="20" required id="id_slug"></div><div>'
+ '<label for="id_checkbox">Checkbox:</label>'
+ '<input type="checkbox" name="checkbox" required id="id_checkbox"></div>',
)
def test_orderfields_form(self):
@@ -704,10 +704,10 @@ class ModelFormBaseTest(TestCase):
self.assertEqual(list(OrderFields.base_fields), ["url", "name"])
self.assertHTMLEqual(
str(OrderFields()),
- """<tr><th><label for="id_url">The URL:</label></th>
-<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr>
-<tr><th><label for="id_name">Name:</label></th>
-<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr>""",
+ '<div><label for="id_url">The URL:</label>'
+ '<input type="text" name="url" maxlength="40" required id="id_url">'
+ '</div><div><label for="id_name">Name:</label><input type="text" '
+ 'name="name" maxlength="20" required id="id_name"></div>',
)
def test_orderfields2_form(self):
@@ -1460,12 +1460,11 @@ class ModelFormBasicTests(TestCase):
f = BaseCategoryForm()
self.assertHTMLEqual(
str(f),
- """<tr><th><label for="id_name">Name:</label></th>
-<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr>
-<tr><th><label for="id_slug">Slug:</label></th>
-<td><input id="id_slug" type="text" name="slug" maxlength="20" required></td></tr>
-<tr><th><label for="id_url">The URL:</label></th>
-<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr>""",
+ '<div><label for="id_name">Name:</label><input type="text" name="name" '
+ 'maxlength="20" required id="id_name"></div><div><label for="id_slug">Slug:'
+ '</label><input type="text" name="slug" maxlength="20" required '
+ 'id="id_slug"></div><div><label for="id_url">The URL:</label>'
+ '<input type="text" name="url" maxlength="40" required id="id_url"></div>',
)
self.assertHTMLEqual(
str(f.as_ul()),
@@ -1538,12 +1537,9 @@ class ModelFormBasicTests(TestCase):
f = RoykoForm(auto_id=False, instance=self.w_royko)
self.assertHTMLEqual(
str(f),
- """
- <tr><th>Name:</th><td>
- <input type="text" name="name" value="Mike Royko" maxlength="50" required>
- <br>
- <span class="helptext">Use both first and last names.</span></td></tr>
- """,
+ '<div>Name:<div class="helptext">Use both first and last names.</div>'
+ '<input type="text" name="name" value="Mike Royko" maxlength="50" '
+ "required></div>",
)
art = Article.objects.create(
@@ -1703,30 +1699,39 @@ class ModelFormBasicTests(TestCase):
self.assertHTMLEqual(
str(f),
"""
- <tr><th>Headline:</th><td>
- <input type="text" name="headline" maxlength="50" required></td></tr>
- <tr><th>Slug:</th><td>
- <input type="text" name="slug" maxlength="50" required></td></tr>
- <tr><th>Pub date:</th><td>
- <input type="text" name="pub_date" required></td></tr>
- <tr><th>Writer:</th><td><select name="writer" required>
- <option value="" selected>---------</option>
- <option value="%s">Bob Woodward</option>
- <option value="%s">Mike Royko</option>
- </select></td></tr>
- <tr><th>Article:</th><td>
- <textarea rows="10" cols="40" name="article" required></textarea></td></tr>
- <tr><th>Categories:</th><td><select multiple name="categories">
- <option value="%s">Entertainment</option>
- <option value="%s">It&#x27;s a test</option>
- <option value="%s">Third test</option>
- </select></td></tr>
- <tr><th>Status:</th><td><select name="status">
- <option value="" selected>---------</option>
- <option value="1">Draft</option>
- <option value="2">Pending</option>
- <option value="3">Live</option>
- </select></td></tr>
+ <div>Headline:
+ <input type="text" name="headline" maxlength="50" required>
+ </div>
+ <div>Slug:
+ <input type="text" name="slug" maxlength="50" required>
+ </div>
+ <div>Pub date:
+ <input type="text" name="pub_date" required>
+ </div>
+ <div>Writer:
+ <select name="writer" required>
+ <option value="" selected>---------</option>
+ <option value="%s">Bob Woodward</option>
+ <option value="%s">Mike Royko</option>
+ </select>
+ </div>
+ <div>Article:
+ <textarea name="article" cols="40" rows="10" required></textarea>
+ </div>
+ <div>Categories:
+ <select name="categories" multiple>
+ <option value="%s">Entertainment</option>
+ <option value="%s">It&#x27;s a test</option>
+ <option value="%s">Third test</option>
+ </select>
+ </div>
+ <div>Status:
+ <select name="status">
+ <option value="" selected>---------</option>
+ <option value="1">Draft</option><option value="2">Pending</option>
+ <option value="3">Live</option>
+ </select>
+ </div>
"""
% (self.w_woodward.pk, self.w_royko.pk, self.c1.pk, self.c2.pk, self.c3.pk),
)
@@ -1791,12 +1796,8 @@ class ModelFormBasicTests(TestCase):
f = PartialArticleForm(auto_id=False)
self.assertHTMLEqual(
str(f),
- """
- <tr><th>Headline:</th><td>
- <input type="text" name="headline" maxlength="50" required></td></tr>
- <tr><th>Pub date:</th><td>
- <input type="text" name="pub_date" required></td></tr>
- """,
+ '<div>Headline:<input type="text" name="headline" maxlength="50" required>'
+ '</div><div>Pub date:<input type="text" name="pub_date" required></div>',
)
class PartialArticleFormWithSlug(forms.ModelForm):
@@ -2990,10 +2991,10 @@ class OtherModelFormTests(TestCase):
self.assertHTMLEqual(
str(CategoryForm()),
- """<tr><th><label for="id_description">Description:</label></th>
-<td><input type="text" name="description" id="id_description" required></td></tr>
-<tr><th><label for="id_url">The URL:</label></th>
-<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr>""",
+ '<div><label for="id_description">Description:</label><input type="text" '
+ 'name="description" required id="id_description"></div><div>'
+ '<label for="id_url">The URL:</label><input type="text" name="url" '
+ 'maxlength="40" required id="id_url"></div>',
)
# to_field_name should also work on ModelMultipleChoiceField ##################
@@ -3014,8 +3015,8 @@ class OtherModelFormTests(TestCase):
self.assertEqual(list(CustomFieldForExclusionForm.base_fields), ["name"])
self.assertHTMLEqual(
str(CustomFieldForExclusionForm()),
- """<tr><th><label for="id_name">Name:</label></th>
-<td><input id="id_name" type="text" name="name" maxlength="10" required></td></tr>""",
+ '<div><label for="id_name">Name:</label><input type="text" '
+ 'name="name" maxlength="10" required id="id_name"></div>',
)
def test_iterable_model_m2m(self):
diff --git a/tests/postgres_tests/test_array.py b/tests/postgres_tests/test_array.py
index 7243ab6a5a..1100e8f3b0 100644
--- a/tests/postgres_tests/test_array.py
+++ b/tests/postgres_tests/test_array.py
@@ -1196,14 +1196,12 @@ class TestSplitFormField(PostgreSQLSimpleTestCase):
self.assertHTMLEqual(
str(SplitForm()),
"""
- <tr>
- <th><label for="id_array_0">Array:</label></th>
- <td>
- <input id="id_array_0" name="array_0" type="text" required>
- <input id="id_array_1" name="array_1" type="text" required>
- <input id="id_array_2" name="array_2" type="text" required>
- </td>
- </tr>
+ <div>
+ <label for="id_array_0">Array:</label>
+ <input id="id_array_0" name="array_0" type="text" required>
+ <input id="id_array_1" name="array_1" type="text" required>
+ <input id="id_array_2" name="array_2" type="text" required>
+ </div>
""",
)
diff --git a/tests/postgres_tests/test_ranges.py b/tests/postgres_tests/test_ranges.py
index 1b155ed51a..7f8fc6bb8c 100644
--- a/tests/postgres_tests/test_ranges.py
+++ b/tests/postgres_tests/test_ranges.py
@@ -687,17 +687,15 @@ class TestFormField(PostgreSQLSimpleTestCase):
self.assertHTMLEqual(
str(form),
"""
- <tr>
- <th>
- <label>Field:</label>
- </th>
- <td>
+ <div>
+ <fieldset>
+ <legend>Field:</legend>
<input id="id_field_0_0" name="field_0_0" type="text">
<input id="id_field_0_1" name="field_0_1" type="text">
<input id="id_field_1_0" name="field_1_0" type="text">
<input id="id_field_1_1" name="field_1_1" type="text">
- </td>
- </tr>
+ </fieldset>
+ </div>
""",
)
form = SplitForm(
@@ -788,13 +786,13 @@ class TestFormField(PostgreSQLSimpleTestCase):
self.assertHTMLEqual(
str(RangeForm()),
"""
- <tr>
- <th><label>Ints:</label></th>
- <td>
+ <div>
+ <fieldset>
+ <legend>Ints:</legend>
<input id="id_ints_0" name="ints_0" type="number">
<input id="id_ints_1" name="ints_1" type="number">
- </td>
- </tr>
+ </fieldset>
+ </div>
""",
)
diff --git a/tests/runtests.py b/tests/runtests.py
index e3a60d777b..e5adb902c3 100755
--- a/tests/runtests.py
+++ b/tests/runtests.py
@@ -243,6 +243,9 @@ def setup_collect_tests(start_at, start_after, test_labels=None):
"fields.W342", # ForeignKey(unique=True) -> OneToOneField
]
+ # RemovedInDjango50Warning
+ settings.FORM_RENDERER = "django.forms.renderers.DjangoDivFormRenderer"
+
# Load all the ALWAYS_INSTALLED_APPS.
django.setup()