summaryrefslogtreecommitdiff
path: root/tests/model_formsets
diff options
context:
space:
mode:
authorStanislas Guerra <stanislas.guerra@gmail.com>2015-02-24 10:54:05 +0100
committerTim Graham <timograham@gmail.com>2015-02-24 11:49:00 -0500
commit4c2f546b55c029334d22e69bb29db97f9356faa3 (patch)
tree54f0d698666f872649bb9dca18ae6bc182ad21bb /tests/model_formsets
parent8e129b42ad9c9adca599228ae2ad68271fa46d44 (diff)
downloaddjango-4c2f546b55c029334d22e69bb29db97f9356faa3.tar.gz
Fixed #24395 -- Ensured inline ModelsForms have an updated related instance.
Diffstat (limited to 'tests/model_formsets')
-rw-r--r--tests/model_formsets/tests.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/model_formsets/tests.py b/tests/model_formsets/tests.py
index 217a1a1049..07476ebbc3 100644
--- a/tests/model_formsets/tests.py
+++ b/tests/model_formsets/tests.py
@@ -819,6 +819,38 @@ class ModelFormsetTest(TestCase):
formset = AuthorBooksFormSet(data, instance=author, queryset=custom_qs)
self.assertTrue(formset.is_valid())
+ def test_inline_formsets_with_custom_save_method_related_instance(self):
+ """
+ The ModelForm.save() method should be able to access the related object
+ if it exists in the database (#24395).
+ """
+ class PoemForm2(forms.ModelForm):
+ def save(self, commit=True):
+ poem = super(PoemForm2, self).save(commit=False)
+ poem.name = "%s by %s" % (poem.name, poem.poet.name)
+ if commit:
+ poem.save()
+ return poem
+
+ PoemFormSet = inlineformset_factory(Poet, Poem, form=PoemForm2, fields="__all__")
+ data = {
+ 'poem_set-TOTAL_FORMS': '1',
+ 'poem_set-INITIAL_FORMS': '0',
+ 'poem_set-MAX_NUM_FORMS': '',
+ 'poem_set-0-name': 'Le Lac',
+ }
+ poet = Poet()
+ formset = PoemFormSet(data=data, instance=poet)
+ self.assertTrue(formset.is_valid())
+
+ # The Poet instance is saved after the formset instantiation. This
+ # happens in admin's changeform_view() when adding a new object and
+ # some inlines in the same request.
+ poet.name = 'Lamartine'
+ poet.save()
+ poem = formset.save()[0]
+ self.assertEqual(poem.name, 'Le Lac by Lamartine')
+
def test_inline_formsets_with_wrong_fk_name(self):
""" Regression for #23451 """
message = "fk_name 'title' is not a ForeignKey to 'model_formsets.Author'."