summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Hill <alex@hill.net.au>2016-09-01 13:18:41 +0800
committerTim Graham <timograham@gmail.com>2016-09-01 09:18:34 -0400
commitdb3eabfae5c590801a74e0b318663b6480145fb9 (patch)
tree3239f71def080125242030803a132937146bb5bb
parente19490d4b1fce5ee89142ee1a17b138f1ee2ea3a (diff)
[1.10.x] Refs #27039 -- Fixed regression with field defaults in prefixed forms.
Backport of d9c083cfee853272ded14c6c87623e910c9e81c4 from master
-rw-r--r--django/forms/models.py2
-rw-r--r--tests/model_forms/tests.py16
2 files changed, 17 insertions, 1 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index b3aab63124..1d54ea9676 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -54,7 +54,7 @@ def construct_instance(form, instance, fields=None, exclude=None):
continue
# Leave defaults for fields that aren't in POST data, except for
# checkbox inputs because they don't appear in POST data if not checked.
- if (f.has_default() and f.name not in form.data and
+ if (f.has_default() and form.add_prefix(f.name) not in form.data and
not getattr(form[f.name].field.widget, 'dont_use_model_field_default_for_empty_data', False)):
continue
# Defer saving file-type fields until after the other fields, so a
diff --git a/tests/model_forms/tests.py b/tests/model_forms/tests.py
index 9d3d440fdb..593e18fdaa 100644
--- a/tests/model_forms/tests.py
+++ b/tests/model_forms/tests.py
@@ -585,6 +585,22 @@ class ModelFormBaseTest(TestCase):
self.assertIsInstance(mf1.fields['active'].widget, forms.CheckboxInput)
self.assertIs(m1._meta.get_field('active').get_default(), True)
+ def test_prefixed_form_with_default_field(self):
+ class PubForm(forms.ModelForm):
+ prefix = 'form-prefix'
+
+ class Meta:
+ model = PublicationDefaults
+ fields = ('mode',)
+
+ mode = 'de'
+ self.assertNotEqual(mode, PublicationDefaults._meta.get_field('mode').get_default())
+
+ mf1 = PubForm({'form-prefix-mode': mode})
+ self.assertEqual(mf1.errors, {})
+ m1 = mf1.save(commit=False)
+ self.assertEqual(m1.mode, mode)
+
class FieldOverridesByFormMetaForm(forms.ModelForm):
class Meta: