Skip to content
Browse files

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

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

git-svn-id: bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
1 parent f13328f commit c7cc4cfb9ebef17930db4a92cd0632a536a4ff7a @claudep claudep committed
2 django/views/generic/
@@ -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):
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
+ .. 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
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
+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
9 tests/regressiontests/generic_views/
@@ -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()
4 tests/regressiontests/generic_views/
@@ -5,6 +5,6 @@
MonthArchiveViewTests, WeekArchiveViewTests, DayArchiveViewTests,
from .detail import DetailViewTest
-from .edit import (ModelFormMixinTests, CreateViewTests, UpdateViewTests,
- DeleteViewTests)
+from .edit import (FormMixinTests, ModelFormMixinTests, CreateViewTests,
+ UpdateViewTests, DeleteViewTests)
from .list import ListViewTests

0 comments on commit c7cc4cf

Please sign in to comment.
Something went wrong with that request. Please try again.