Loading django/contrib/formtools/tests/models.py 0 → 100644 +26 −0 Original line number Diff line number Diff line # coding: utf-8 from django.db import models from django.utils.encoding import python_2_unicode_compatible @python_2_unicode_compatible class Poet(models.Model): name = models.CharField(max_length=100) class Meta: app_label = 'formtools' def __str__(self): return self.name @python_2_unicode_compatible class Poem(models.Model): poet = models.ForeignKey(Poet) name = models.CharField(max_length=100) class Meta: app_label = 'formtools' def __str__(self): return self.name django/contrib/formtools/tests/wizard/wizardtests/tests.py +24 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ from django.contrib.auth.models import User from django.contrib.auth.tests.utils import skipIfCustomUser from django.contrib.formtools.wizard.views import CookieWizardView from django.utils._os import upath from django.contrib.formtools.tests.models import Poet, Poem class UserForm(forms.ModelForm): Loading @@ -19,6 +20,7 @@ class UserForm(forms.ModelForm): UserFormSet = forms.models.modelformset_factory(User, form=UserForm, extra=2) PoemFormSet = forms.models.inlineformset_factory(Poet, Poem, fields="__all__") class WizardTests(object): Loading Loading @@ -405,3 +407,25 @@ class WizardFormKwargsOverrideTests(TestCase): self.assertEqual(formset.initial_form_count(), 1) self.assertEqual(['staff@example.com'], list(formset.queryset.values_list('email', flat=True))) class WizardInlineFormSetTests(TestCase): def setUp(self): self.rf = RequestFactory() self.poet = Poet.objects.create(name='test') self.poem = self.poet.poem_set.create(name='test poem') def test_set_instance(self): # Regression test for #21259 poet = self.poet class InlineFormSetWizard(CookieWizardView): instance = None def get_form_instance(self, step): if self.instance is None: self.instance = poet return self.instance view = InlineFormSetWizard.as_view([PoemFormSet]) response = view(self.rf.get('/')) formset = response.context_data['wizard']['form'] self.assertEqual(formset.instance, self.poet) django/contrib/formtools/wizard/views.py +7 −6 Original line number Diff line number Diff line Loading @@ -398,23 +398,24 @@ class WizardView(TemplateView): """ if step is None: step = self.steps.current form_class = self.form_list[step] # prepare the kwargs for the form instance. kwargs = self.get_form_kwargs(step) kwargs.update({ 'data': data, 'files': files, 'prefix': self.get_form_prefix(step, self.form_list[step]), 'prefix': self.get_form_prefix(step, form_class), 'initial': self.get_form_initial(step), }) if issubclass(self.form_list[step], forms.ModelForm): # If the form is based on ModelForm, add instance if available # and not previously set. if issubclass(form_class, (forms.ModelForm, forms.models.BaseInlineFormSet)): # If the form is based on ModelForm or InlineFormSet, # add instance if available and not previously set. kwargs.setdefault('instance', self.get_form_instance(step)) elif issubclass(self.form_list[step], forms.models.BaseModelFormSet): elif issubclass(form_class, forms.models.BaseModelFormSet): # If the form is based on ModelFormSet, add queryset if available # and not previous set. kwargs.setdefault('queryset', self.get_form_instance(step)) return self.form_list[step](**kwargs) return form_class(**kwargs) def process_step(self, form): """ Loading Loading
django/contrib/formtools/tests/models.py 0 → 100644 +26 −0 Original line number Diff line number Diff line # coding: utf-8 from django.db import models from django.utils.encoding import python_2_unicode_compatible @python_2_unicode_compatible class Poet(models.Model): name = models.CharField(max_length=100) class Meta: app_label = 'formtools' def __str__(self): return self.name @python_2_unicode_compatible class Poem(models.Model): poet = models.ForeignKey(Poet) name = models.CharField(max_length=100) class Meta: app_label = 'formtools' def __str__(self): return self.name
django/contrib/formtools/tests/wizard/wizardtests/tests.py +24 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ from django.contrib.auth.models import User from django.contrib.auth.tests.utils import skipIfCustomUser from django.contrib.formtools.wizard.views import CookieWizardView from django.utils._os import upath from django.contrib.formtools.tests.models import Poet, Poem class UserForm(forms.ModelForm): Loading @@ -19,6 +20,7 @@ class UserForm(forms.ModelForm): UserFormSet = forms.models.modelformset_factory(User, form=UserForm, extra=2) PoemFormSet = forms.models.inlineformset_factory(Poet, Poem, fields="__all__") class WizardTests(object): Loading Loading @@ -405,3 +407,25 @@ class WizardFormKwargsOverrideTests(TestCase): self.assertEqual(formset.initial_form_count(), 1) self.assertEqual(['staff@example.com'], list(formset.queryset.values_list('email', flat=True))) class WizardInlineFormSetTests(TestCase): def setUp(self): self.rf = RequestFactory() self.poet = Poet.objects.create(name='test') self.poem = self.poet.poem_set.create(name='test poem') def test_set_instance(self): # Regression test for #21259 poet = self.poet class InlineFormSetWizard(CookieWizardView): instance = None def get_form_instance(self, step): if self.instance is None: self.instance = poet return self.instance view = InlineFormSetWizard.as_view([PoemFormSet]) response = view(self.rf.get('/')) formset = response.context_data['wizard']['form'] self.assertEqual(formset.instance, self.poet)
django/contrib/formtools/wizard/views.py +7 −6 Original line number Diff line number Diff line Loading @@ -398,23 +398,24 @@ class WizardView(TemplateView): """ if step is None: step = self.steps.current form_class = self.form_list[step] # prepare the kwargs for the form instance. kwargs = self.get_form_kwargs(step) kwargs.update({ 'data': data, 'files': files, 'prefix': self.get_form_prefix(step, self.form_list[step]), 'prefix': self.get_form_prefix(step, form_class), 'initial': self.get_form_initial(step), }) if issubclass(self.form_list[step], forms.ModelForm): # If the form is based on ModelForm, add instance if available # and not previously set. if issubclass(form_class, (forms.ModelForm, forms.models.BaseInlineFormSet)): # If the form is based on ModelForm or InlineFormSet, # add instance if available and not previously set. kwargs.setdefault('instance', self.get_form_instance(step)) elif issubclass(self.form_list[step], forms.models.BaseModelFormSet): elif issubclass(form_class, forms.models.BaseModelFormSet): # If the form is based on ModelFormSet, add queryset if available # and not previous set. kwargs.setdefault('queryset', self.get_form_instance(step)) return self.form_list[step](**kwargs) return form_class(**kwargs) def process_step(self, form): """ Loading