diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2009-05-15 12:44:51 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2009-05-15 12:44:51 +0000 |
| commit | a00be663112bc674f71492717f7bbbb35b922e42 (patch) | |
| tree | 59244aea94e2926fa8267b69a4ceb0dc0857782d /django | |
| parent | bed1418034ec20a308ac8df94ebaf97fd489ea30 (diff) | |
Fixed #11120 -- Corrected handling of inlines attached to inherited classes, broken by r10756. Thanks to George Song and Michael Strickland for the simultaneous reports.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10787 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
| -rw-r--r-- | django/forms/models.py | 15 |
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] |
