From 7c10d695278f080c020585c2dd2089c3f0dcceff Mon Sep 17 00:00:00 2001 From: Joseph Kocherhans Date: Tue, 3 Jul 2007 05:45:00 +0000 Subject: [PATCH] newforms-admin: Changed BoundInlineObject and templates to treat deletion, ordering, and pk fields as special cases for convenience. Also, changed StackedInline not to show a form row for the pk field. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@5588 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/options.py | 25 +++++++++++++------ .../templates/admin/edit_inline_stacked.html | 2 ++ .../templates/admin/edit_inline_tabular.html | 10 +++----- django/newforms/models.py | 3 ++- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 4140b7c839..5a53b63d59 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -649,15 +649,12 @@ class BoundInline(object): def __iter__(self): for form, original in zip(self.formset.change_forms, self.formset.get_inline_objects()): - yield BoundInlineObject(form, original, self.inline_admin) + yield BoundInlineObject(self.formset, form, original, self.inline_admin) for form in self.formset.add_forms: - yield BoundInlineObject(form, None, self.inline_admin) + yield BoundInlineObject(self.formset, form, None, self.inline_admin) def fields(self): - # HACK: each form instance has some extra fields. Getting those fields - # from the form class will take some rearranging. Get them from the - # first form instance for now. - return list(self.formset.forms[0]) + return self.formset.form_class.base_fields.values() def verbose_name(self): return self.inline_admin.verbose_name @@ -666,7 +663,8 @@ class BoundInline(object): return self.inline_admin.verbose_name_plural class BoundInlineObject(object): - def __init__(self, form, original, inline_admin): + def __init__(self, formset, form, original, inline_admin): + self.formset = formset self.inline_admin = inline_admin self.base_form = form self.form = AdminForm(form, self.fieldsets(), inline_admin.prepopulated_fields) @@ -682,8 +680,19 @@ class BoundInlineObject(object): given HttpRequest object. """ if self.inline_admin.fields is None: - default_fields = [f for f in self.base_form.fields] + default_fields = [f for f in self.base_form.base_fields] yield Fieldset(fields=default_fields) else: for name, options in self.opts.fields: yield Fieldset(name, options['fields'], classes=options.get('classes', '').split(' '), description=options.get('description')) + + def pk_field(self): + return BoundField(self.base_form, self.formset._pk_field_name, False) + + def deletion_field(self): + from django.newforms.formsets import DELETION_FIELD_NAME + return BoundField(self.base_form, DELETION_FIELD_NAME, False) + + def ordering_field(self): + from django.newforms.formsets import ORDERING_FIELD_NAME + return BoundField(self.base_form, ORDERING_FIELD_NAME, False) diff --git a/django/contrib/admin/templates/admin/edit_inline_stacked.html b/django/contrib/admin/templates/admin/edit_inline_stacked.html index 1955842385..2bffda2967 100644 --- a/django/contrib/admin/templates/admin/edit_inline_stacked.html +++ b/django/contrib/admin/templates/admin/edit_inline_stacked.html @@ -19,6 +19,8 @@ {% endfor %} {% endfor %} + {{ bound_inline_object.pk_field.field }} + {% if bound_inline.formset.deletable %}
{{ bound_inline_object.deletion_field.field }} {{ bound_inline_object.deletion_field.label_tag }}
{% endif %} {% endfor %} diff --git a/django/contrib/admin/templates/admin/edit_inline_tabular.html b/django/contrib/admin/templates/admin/edit_inline_tabular.html index 1ff7a4bf5f..91aac45a4f 100644 --- a/django/contrib/admin/templates/admin/edit_inline_tabular.html +++ b/django/contrib/admin/templates/admin/edit_inline_tabular.html @@ -3,6 +3,7 @@

{{ bound_inline.verbose_name_plural|capfirst|escape }}

+ {% if bound_inline.formset.deletable %}{% endif %} {% for field in bound_inline.fields %} {% if not field.is_hidden %} @@ -21,15 +22,12 @@ {% endif %} + {{ bound_inline_object.pk_field.field }} + {% if bound_inline.formset.deletable %}{% endif %} {% for bfset in bound_inline_object.form %} {% for line in bfset %} {% for field in line %} - - {% if not field.field.is_hidden %} - - {% else %} - {{ field.field }} - {% endif %} + {% endfor %} {% endfor %} {% endfor %} diff --git a/django/newforms/models.py b/django/newforms/models.py index 3b130cb026..4fd7b354f9 100644 --- a/django/newforms/models.py +++ b/django/newforms/models.py @@ -267,7 +267,8 @@ class BaseModelFormSet(BaseFormSet): def add_fields(self, form, index): """Add a hidden field for the object's primary key.""" - form.fields[self.model._meta.pk.attname] = IntegerField(required=False, widget=HiddenInput) + self._pk_field_name = self.model._meta.pk.attname + form.fields[self._pk_field_name] = IntegerField(required=False, widget=HiddenInput) super(BaseModelFormSet, self).add_fields(form, index) def formset_for_model(model, form=BaseForm, formfield_callback=lambda f: f.formfield(), formset=BaseModelFormSet, extra=1, orderable=False, deletable=False, fields=None):
Delete?{{ field.label|capfirst|escape }}
{{ bound_inline_object.deletion_field.field }}{{ field.field }}{{ field.field }}