Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #16138 -- Made FormMixin get_initial return a copy of the 'init…

…ial' class variable. Thanks hanson2010, wilfred@potatolondon.com and agriffis for their work on the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17765 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit c7cc4cfb9ebef17930db4a92cd0632a536a4ff7a 1 parent f13328f
@claudep claudep authored
View
2  django/views/generic/edit.py
@@ -19,7 +19,7 @@ def get_initial(self):
"""
Returns the initial data to use for forms on this view.
"""
- return self.initial
+ return self.initial.copy()
def get_form_class(self):
"""
View
7 docs/ref/class-based-views.txt
@@ -431,9 +431,14 @@ FormMixin
.. method:: get_initial()
- Retrieve initial data for the form. By default, returns
+ Retrieve initial data for the form. By default, returns a copy of
:attr:`.initial`.
+ .. admonition:: Changed in 1.4
+
+ In Django 1.3, this method was returning the :attr:`initial` class
+ variable itself.
+
.. method:: get_form_class()
Retrieve the form class to instantiate. By default
View
9 docs/releases/1.4.txt
@@ -1107,6 +1107,15 @@ passed to the markdown filter, both the ``safe_mode=True`` and
Python-Markdown library less than 2.1, a warning is issued that the output is
insecure.
+FormMixin get_initial returns an instance-specific dictionary
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In Django 1.3, the ``get_initial`` method of the
+:class:`django.views.generic.edit.FormMixin` class was returning the
+class ``initial`` dictionary. This has been fixed to return a copy of this
+dictionary, so form instances can modify their initial data without messing
+with the class variable.
+
Features deprecated in 1.4
==========================
View
9 tests/regressiontests/generic_views/edit.py
@@ -5,11 +5,20 @@
from django import forms
from django.test import TestCase
from django.utils.unittest import expectedFailure
+from django.views.generic.edit import FormMixin
from . import views
from .models import Artist, Author
+class FormMixinTests(TestCase):
+ def test_initial_data(self):
+ """ Test instance independence of initial data dict (see #16138) """
+ initial_1 = FormMixin().get_initial()
+ initial_1['foo'] = 'bar'
+ initial_2 = FormMixin().get_initial()
+ self.assertNotEqual(initial_1, initial_2)
+
class ModelFormMixinTests(TestCase):
def test_get_form(self):
form_class = views.AuthorGetQuerySetFormView().get_form_class()
View
4 tests/regressiontests/generic_views/tests.py
@@ -5,6 +5,6 @@
MonthArchiveViewTests, WeekArchiveViewTests, DayArchiveViewTests,
DateDetailViewTests)
from .detail import DetailViewTest
-from .edit import (ModelFormMixinTests, CreateViewTests, UpdateViewTests,
- DeleteViewTests)
+from .edit import (FormMixinTests, ModelFormMixinTests, CreateViewTests,
+ UpdateViewTests, DeleteViewTests)
from .list import ListViewTests
Please sign in to comment.
Something went wrong with that request. Please try again.