diff options
| author | Luke Plant <L.Plant.98@cantab.net> | 2010-03-08 15:13:08 +0000 |
|---|---|---|
| committer | Luke Plant <L.Plant.98@cantab.net> | 2010-03-08 15:13:08 +0000 |
| commit | 55c71d3ed5867c2788569eea562b3a59faad4aa4 (patch) | |
| tree | df789f26949253fa3f80716525bfa5c44ae82164 /tests | |
| parent | 6c507a5cd4e1f1752ce163023000065842764274 (diff) | |
[1.1.X] Fixed #11940 - ModelForm evaluates callable default values on form class creation
Thanks to Harm Geerts for the report and initial patch.
Backport of [12721] from trunk
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12722 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/modeltests/model_formsets/models.py | 2 | ||||
| -rw-r--r-- | tests/regressiontests/forms/models.py | 13 |
2 files changed, 13 insertions, 2 deletions
diff --git a/tests/modeltests/model_formsets/models.py b/tests/modeltests/model_formsets/models.py index 1644ddf37b..4649ec68d6 100644 --- a/tests/modeltests/model_formsets/models.py +++ b/tests/modeltests/model_formsets/models.py @@ -930,7 +930,7 @@ False # when determine what extra forms have changed to save. >>> form = formset.forms[0] # this formset only has one form ->>> now = form.fields['date_joined'].initial +>>> now = form.fields['date_joined'].initial() >>> print form.as_p() <p><label for="id_membership_set-0-date_joined">Date joined:</label> <input type="text" name="membership_set-0-date_joined" value="..." id="id_membership_set-0-date_joined" /><input type="hidden" name="initial-membership_set-0-date_joined" value="..." id="initial-membership_set-0-id_membership_set-0-date_joined" /></p> <p><label for="id_membership_set-0-karma">Karma:</label> <input type="text" name="membership_set-0-karma" id="id_membership_set-0-karma" /><input type="hidden" name="membership_set-0-person" value="1" id="id_membership_set-0-person" /><input type="hidden" name="membership_set-0-id" id="id_membership_set-0-id" /></p> diff --git a/tests/regressiontests/forms/models.py b/tests/regressiontests/forms/models.py index 3b47b50b00..7af6658813 100644 --- a/tests/regressiontests/forms/models.py +++ b/tests/regressiontests/forms/models.py @@ -15,10 +15,17 @@ temp_storage = FileSystemStorage(location=temp_storage_location) class BoundaryModel(models.Model): positive_integer = models.PositiveIntegerField(null=True, blank=True) +callable_default_value = 0 +def callable_default(): + global callable_default_value + callable_default_value = callable_default_value + 1 + return callable_default_value + class Defaults(models.Model): name = models.CharField(max_length=255, default='class default value') def_date = models.DateField(default = datetime.date(1980, 1, 1)) value = models.IntegerField(default=42) + callable_default = models.IntegerField(default=callable_default) class ChoiceModel(models.Model): """For ModelChoiceField and ModelMultipleChoiceField tests.""" @@ -85,6 +92,10 @@ u'class default value' datetime.date(1980, 1, 1) >>> DefaultsForm().fields['value'].initial 42 +>>> r1 = DefaultsForm()['callable_default'].as_widget() +>>> r2 = DefaultsForm()['callable_default'].as_widget() +>>> r1 == r2 +False In a ModelForm that is passed an instance, the initial values come from the instance's values, not the model's defaults. @@ -102,7 +113,7 @@ datetime.date(1969, 4, 4) ... name = CharField(max_length=255) ... class Meta: ... model = Defaults -... exclude = ['name'] +... exclude = ['name', 'callable_default'] >>> f = ExcludingForm({'name': u'Hello', 'value': 99, 'def_date': datetime.date(1999, 3, 2)}) >>> f.is_valid() True |
