From aefb07d8654e9b2873ad62d599d53c6f027e94de Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sun, 3 May 2009 13:46:30 +0000 Subject: [PATCH] [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 +++++++++++------ .../templates/admin/edit_inline/stacked.html | 2 +- .../templates/admin/edit_inline/tabular.html | 17 +++++++++-------- 3 files changed, 21 insertions(+), 15 deletions(-) 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. diff --git a/django/contrib/admin/templates/admin/edit_inline/stacked.html b/django/contrib/admin/templates/admin/edit_inline/stacked.html index 85488558a2..10629044ed 100644 --- a/django/contrib/admin/templates/admin/edit_inline/stacked.html +++ b/django/contrib/admin/templates/admin/edit_inline/stacked.html @@ -17,7 +17,7 @@ {% for fieldset in inline_admin_form %} {% include "admin/includes/fieldset.html" %} {% endfor %} - {{ inline_admin_form.pk_field.field }} + {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %} {{ inline_admin_form.fk_field.field }} {% endfor %} diff --git a/django/contrib/admin/templates/admin/edit_inline/tabular.html b/django/contrib/admin/templates/admin/edit_inline/tabular.html index 820928a143..bf947adb76 100644 --- a/django/contrib/admin/templates/admin/edit_inline/tabular.html +++ b/django/contrib/admin/templates/admin/edit_inline/tabular.html @@ -14,7 +14,7 @@ {% endfor %} {% if inline_admin_formset.formset.can_delete %}{% trans "Delete?" %}{% endif %} - + {% for inline_admin_form in inline_admin_formset %} {% if inline_admin_form.form.non_field_errors %} {{ inline_admin_form.form.non_field_errors }} @@ -26,7 +26,8 @@ {% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %} {% if inline_admin_form.show_url %}{% trans "View on site" %}{% endif %}

{% endif %} - {{ inline_admin_form.pk_field.field }} {{ inline_admin_form.fk_field.field }} + {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %} + {{ inline_admin_form.fk_field.field }} {% spaceless %} {% for fieldset in inline_admin_form %} {% for line in fieldset %} @@ -48,22 +49,22 @@ {% endfor %} {% endfor %} {% endfor %} - + {% if inline_admin_formset.formset.can_delete %} {% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %} {% endif %} - + {% endfor %} - + - + - + {# #} - +