Ticket #13794: to_field_formsets.3.diff​

File to_field_formsets.3.diff​, 1.8 KB (added by anonymous, 10 years ago)
Line 
1diff --git a/django/forms/models.py b/django/forms/models.py
2index 9e6cab8..84da2f7 100644
3--- a/django/forms/models.py
4+++ b/django/forms/models.py
5@@ -876,7 +876,11 @@ class BaseInlineFormSet(BaseModelFormSet):
6 form.data[form.add_prefix(self.fk.name)] = None
7
8 # Set the fk value here so that the form can do its validation.
9- setattr(form.instance, self.fk.get_attname(), self.instance.pk)
10+ fk_value = self.instance.pk
11+ if self.fk.rel.field_name != self.fk.rel.to._meta.pk.name:
12+ fk_value = getattr(self.instance, self.fk.rel.field_name)
13+ fk_value = getattr(fk_value, 'pk', fk_value)
14+ setattr(form.instance, self.fk.get_attname(), fk_value)
15 return form
16
17 @classmethod
18diff --git a/tests/model_formsets_regress/tests.py b/tests/model_formsets_regress/tests.py
19index 7d400d2..a010b9f 100644
20--- a/tests/model_formsets_regress/tests.py
21+++ b/tests/model_formsets_regress/tests.py
22@@ -154,6 +154,18 @@ class InlineFormsetTests(TestCase):
23 else:
24 self.fail('Errors found on formset:%s' % form_set.errors)
25
26+ def test_inline_model_with_to_field(self):
27+ "An inline model with a to_field of a formset with instance have working relations. Regression for #13794"
28+ FormSet = inlineformset_factory(User, UserSite, exclude=('is_superuser',))
29+
30+ user = User.objects.create(username="guido", serial=1337)
31+ UserSite.objects.create(user=user, data=10)
32+ formset = FormSet(instance=user)
33+
34+ formset[0]
35+ # Testing the inline model's relation
36+ self.assertEqual(formset[0].instance.user_id, "guido")
37+
38 def test_formset_with_none_instance(self):
39 "A formset with instance=None can be created. Regression for #11872"
40 Form = modelform_factory(User, fields="__all__")
41--
421.7.9.5
Back to Top