Dies ist (meist) einfach zu tun, dank zu newforms admin. Grundsätzlich müssen Sie eine benutzerdefinierte Inline-Unterklasse erstellen und die Vorlage überschreiben, die zum Rendern im Admin verwendet wird. Angenommen, Sie haben eine App app
und Modelle Model1
und Model2
genannt, würden Sie wie folgt vorgehen:
Erstellen Sie zunächst Ihre admin.py
Datei:
from django.contrib import admin
from app.models import Model1, Model2
class Model2Admin(admin.ModelAdmin):
list_display = (...)
class Model2Inline(admin.TabularInline):
model = Model2
extra = 0
template = 'admin/app/model2/inline.html'
class Model1Admin(admin.ModelAdmin):
list_display = (...)
inlines = (Model2Inline,)
admin.site.register(Model1, Model1Admin)
admin.site.register(Model2, Model2Admin)
Erstellen Sie dann die inline.html
Vorlage bei admin/app/model2
:
{% load i18n %}
<div class="inline-group">
<div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
{{ inline_admin_formset.formset.management_form }}
<fieldset class="module">
<h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst|escape }}</h2>
{{ inline_admin_formset.formset.non_form_errors }}
<table>
<thead>
<tr>
<th colspan="2">Field1</th>
<th>Field2</th>
<th>Field3</th>
</tr>
</thead>
{% for inline_admin_form in inline_admin_formset %}
<tr class="{% cycle row1,row2 %}">
<td class="original">
<!-- Render all form fields as hidden fields: -->
{{ inline_admin_form.pk_field.field }}
{% spaceless %}
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
{{ field.field.as_hidden }}
{% endfor %}
{% endfor %}
{% endfor %}
{% endspaceless %}
</td>
<!-- then display just the values of the fields you're interested in: -->
<td class="field1">
<!-- Make this a link to the change detail page for this object: -->
<a href="{% url admin:app_model2_change inline_admin_form.original.pk %}">{{ inline_admin_form.original.field1 }}</a>
</td>
<td class="field2">
{{ inline_admin_form.original.field2 }}
</td>
<td class="field3">
{{ inline_admin_form.original.field3 }}
</td>
</tr>
{% endfor %}
</table>
</fieldset>
</div>
</div>
Als nächstes Ihre App INSTALLED_APPS
in settings.py
hinzufügen - vergessen Sie nicht django.contrib.admin
auch zu addieren :).
Schließlich bearbeiten Sie Ihre Wurzel urls.py
die folgenden Zeilen enthalten:
from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
...
(r'^admin/', include(admin.site.urls))
)
Das sollte es tun. Beachten Sie, dass admin.site.urls
, die die URL-Umkehrung möglich macht, nur nach Django 1.1 funktioniert.
Nicht was ich suchte, aber sehr cool. Ich muss das zu meinem Trickbuch hinzufügen. –