summaryrefslogtreecommitdiff
path: root/django/forms
diff options
context:
space:
mode:
Diffstat (limited to 'django/forms')
-rw-r--r--django/forms/models.py15
1 files changed, 9 insertions, 6 deletions
diff --git a/django/forms/models.py b/django/forms/models.py
index 351234a433..aab870b6a0 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -617,7 +617,7 @@ class BaseModelFormSet(BaseFormSet):
# the model instance, and sometimes the PK. Handle either.
pk_value = form.fields[pk_name].clean(raw_pk_value)
pk_value = getattr(pk_value, 'pk', pk_value)
-
+
obj = existing_objects[pk_value]
if self.can_delete:
raw_delete_value = form._raw_value(DELETION_FIELD_NAME)
@@ -742,7 +742,8 @@ class BaseInlineFormSet(BaseModelFormSet):
# Use commit=False so we can assign the parent key afterwards, then
# save the object.
obj = form.save(commit=False)
- setattr(obj, self.fk.get_attname(), getattr(self.instance, self.fk.rel.field_name))
+ pk_value = getattr(self.instance, self.fk.rel.field_name)
+ setattr(obj, self.fk.get_attname(), getattr(pk_value, 'pk', pk_value))
if commit:
obj.save()
# form.save_m2m() can be called via the formset later on if commit=False
@@ -757,10 +758,12 @@ class BaseInlineFormSet(BaseModelFormSet):
else:
# The foreign key field might not be on the form, so we poke at the
# Model field to get the label, since we need that for error messages.
- form.fields[self.fk.name] = InlineForeignKeyField(self.instance,
- to_field=self.fk.rel.field_name,
- label=getattr(form.fields.get(self.fk.name), 'label', capfirst(self.fk.verbose_name))
- )
+ kwargs = {
+ 'label': getattr(form.fields.get(self.fk.name), 'label', capfirst(self.fk.verbose_name))
+ }
+ if self.fk.rel.field_name != self.fk.rel.to._meta.pk.name:
+ kwargs['to_field'] = self.fk.rel.field_name
+ form.fields[self.fk.name] = InlineForeignKeyField(self.instance, **kwargs)
def get_unique_error_message(self, unique_check):
unique_check = [field for field in unique_check if field != self.fk.name]