summaryrefslogtreecommitdiff
path: root/tests/forms_tests
diff options
context:
space:
mode:
authorDavid Sanders <shang.xiao.sanders@gmail.com>2022-10-26 19:05:27 +1100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-11-18 13:12:15 +0100
commit25904db9154c5be3ecda9585d96f536841af9126 (patch)
tree393ebc9d13c8d87bd323b59717478c2ab6a914c8 /tests/forms_tests
parent04b15022e8d1f49af69d8a1e6cd678f31f1280ff (diff)
Fixed #34119 -- Prevented callable default hidden widget value from being overridden.
Thanks to Benjamin Rigaud for the report.
Diffstat (limited to 'tests/forms_tests')
-rw-r--r--tests/forms_tests/tests/tests.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/forms_tests/tests/tests.py b/tests/forms_tests/tests/tests.py
index aba405db15..294e574168 100644
--- a/tests/forms_tests/tests/tests.py
+++ b/tests/forms_tests/tests/tests.py
@@ -203,6 +203,46 @@ class ModelFormCallableModelDefault(TestCase):
""",
)
+ def test_callable_default_hidden_widget_value_not_overridden(self):
+ class FieldWithCallableDefaultsModel(models.Model):
+ int_field = models.IntegerField(default=lambda: 1)
+ json_field = models.JSONField(default=dict)
+
+ class FieldWithCallableDefaultsModelForm(ModelForm):
+ class Meta:
+ model = FieldWithCallableDefaultsModel
+ fields = "__all__"
+
+ form = FieldWithCallableDefaultsModelForm(
+ data={
+ "initial-int_field": "1",
+ "int_field": "1000",
+ "initial-json_field": "{}",
+ "json_field": '{"key": "val"}',
+ }
+ )
+ form_html = form.as_p()
+ self.assertHTMLEqual(
+ form_html,
+ """
+ <p>
+ <label for="id_int_field">Int field:</label>
+ <input type="number" name="int_field" value="1000"
+ required id="id_int_field">
+ <input type="hidden" name="initial-int_field" value="1"
+ id="initial-id_int_field">
+ </p>
+ <p>
+ <label for="id_json_field">Json field:</label>
+ <textarea cols="40" id="id_json_field" name="json_field" required rows="10">
+ {&quot;key&quot;: &quot;val&quot;}
+ </textarea>
+ <input id="initial-id_json_field" name="initial-json_field" type="hidden"
+ value="{}">
+ </p>
+ """,
+ )
+
class FormsModelTestCase(TestCase):
def test_unicode_filename(self):