diff --git a/django/forms/models.py b/django/forms/models.py index 9e6cab8..84da2f7 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -876,7 +876,11 @@ class BaseInlineFormSet(BaseModelFormSet): form.data[form.add_prefix(self.fk.name)] = None # Set the fk value here so that the form can do its validation. - setattr(form.instance, self.fk.get_attname(), self.instance.pk) + fk_value = self.instance.pk + if self.fk.rel.field_name != self.fk.rel.to._meta.pk.name: + fk_value = getattr(self.instance, self.fk.rel.field_name) + fk_value = getattr(fk_value, 'pk', fk_value) + setattr(form.instance, self.fk.get_attname(), fk_value) return form @classmethod diff --git a/tests/model_formsets_regress/tests.py b/tests/model_formsets_regress/tests.py index 7d400d2..a010b9f 100644 --- a/tests/model_formsets_regress/tests.py +++ b/tests/model_formsets_regress/tests.py @@ -154,6 +154,18 @@ class InlineFormsetTests(TestCase): else: self.fail('Errors found on formset:%s' % form_set.errors) + def test_inline_model_with_to_field(self): + "An inline model with a to_field of a formset with instance have working relations. Regression for #13794" + FormSet = inlineformset_factory(User, UserSite, exclude=('is_superuser',)) + + user = User.objects.create(username="guido", serial=1337) + UserSite.objects.create(user=user, data=10) + formset = FormSet(instance=user) + + formset[0] + # Testing the inline model's relation + self.assertEqual(formset[0].instance.user_id, "guido") + def test_formset_with_none_instance(self): "A formset with instance=None can be created. Regression for #11872" Form = modelform_factory(User, fields="__all__") -- 1.7.9.5