From aefb07d8654e9b2873ad62d599d53c6f027e94de Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 3 May 2009 13:46:30 +0000 Subject: [1.0.X] Fixed #8903 -- Corrected rendering of admin inline formsets (tabular and stacked) when the inline model has a custom non-autofield primary key. Thanks to dgouldin for the patch. Merge of r10666 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10670 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/helpers.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'django/contrib/admin/helpers.py') diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py index aaa2e304ce..693d61262d 100644 --- a/django/contrib/admin/helpers.py +++ b/django/contrib/admin/helpers.py @@ -132,14 +132,19 @@ class InlineAdminForm(AdminForm): self.original.content_type_id = ContentType.objects.get_for_model(original).pk self.show_url = original and hasattr(original, 'get_absolute_url') super(InlineAdminForm, self).__init__(form, fieldsets, prepopulated_fields) - + def __iter__(self): for name, options in self.fieldsets: yield InlineFieldset(self.formset, self.form, name, **options) - + + def has_auto_field(self): + return self.form._meta.model._meta.has_auto_field + def field_count(self): # tabular.html uses this function for colspan value. - num_of_fields = 1 # always has at least one field + num_of_fields = 0 + if self.has_auto_field(): + num_of_fields += 1 num_of_fields += len(self.fieldsets[0][1]["fields"]) if self.formset.can_order: num_of_fields += 1 @@ -149,7 +154,7 @@ class InlineAdminForm(AdminForm): def pk_field(self): return AdminField(self.form, self.formset._pk_field.name, False) - + def fk_field(self): fk = getattr(self.formset, "fk", None) if fk: @@ -169,14 +174,14 @@ class InlineFieldset(Fieldset): def __init__(self, formset, *args, **kwargs): self.formset = formset super(InlineFieldset, self).__init__(*args, **kwargs) - + def __iter__(self): fk = getattr(self.formset, "fk", None) for field in self.fields: if fk and fk.name == field: continue yield Fieldline(self.form, field) - + class AdminErrorList(forms.util.ErrorList): """ Stores all errors for the form/formsets in an add/change stage view. -- cgit v1.3