Commit c7cc4cfb authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #16138 -- Made FormMixin get_initial return a copy of the 'initial'...

Fixed #16138 -- Made FormMixin get_initial return a copy of the 'initial' 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
parent f13328f7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -19,7 +19,7 @@ class FormMixin(object):
        """
        Returns the initial data to use for forms on this view.
        """
        return self.initial
        return self.initial.copy()

    def get_form_class(self):
        """
+6 −1
Original line number Diff line number Diff line
@@ -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
+9 −0
Original line number Diff line number Diff line
@@ -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
==========================

+9 −0
Original line number Diff line number Diff line
@@ -5,11 +5,20 @@ from django.core.urlresolvers import reverse
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()
+2 −2
Original line number Diff line number Diff line
@@ -5,6 +5,6 @@ from .dates import (ArchiveIndexViewTests, YearArchiveViewTests,
    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