summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/admin/options.py25
-rw-r--r--django/contrib/admin/templates/admin/edit_inline_stacked.html2
-rw-r--r--django/contrib/admin/templates/admin/edit_inline_tabular.html10
-rw-r--r--django/newforms/models.py3
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 %}
</div>
{% endfor %}
+ {{ bound_inline_object.pk_field.field }}
+ {% if bound_inline.formset.deletable %}<div class="form-row">{{ bound_inline_object.deletion_field.field }} {{ bound_inline_object.deletion_field.label_tag }}</div>{% endif %}
</fieldset>
{% endfor %}
</fieldset>
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 @@
<h2>{{ bound_inline.verbose_name_plural|capfirst|escape }}</h2>
<table>
<thead><tr>
+ {% if bound_inline.formset.deletable %}<th>Delete?</th>{% endif %}
{% for field in bound_inline.fields %}
{% if not field.is_hidden %}
<th>{{ field.label|capfirst|escape }}</th>
@@ -21,15 +22,12 @@
{% endif %}
<tr class="{% cycle row1,row2 %}">
+ {{ bound_inline_object.pk_field.field }}
+ {% if bound_inline.formset.deletable %}<td>{{ bound_inline_object.deletion_field.field }}</td>{% endif %}
{% for bfset in bound_inline_object.form %}
{% for line in bfset %}
{% for field in line %}
-
- {% if not field.field.is_hidden %}
- <td>{{ field.field }}</td>
- {% else %}
- {{ field.field }}
- {% endif %}
+ <td>{{ field.field }}</td>
{% 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):