Чтобы справиться с отсутствием вложенных встроенных строк в django-admin, я поместил специальные случаи в два из шаблонов для создания связей между страницами изменения admin и встроенных админов двух моделей.
Мой вопрос: как я могу создать ссылку со страницы изменения администрирования или встроенного администратора одной модели на страницу изменения администратора или встроенный администратор связанной модели без каких-либо неприятных хаков в шаблоне?
Я хотел бы получить общее решение, которое я могу применить к странице изменения администратора или встроенному администратору любой модели.
У меня есть одна модель, post
(не ее настоящее имя), которая является встроенной на странице администрирования blog
, а также имеет собственную страницу администратора. Причина, по которой он не может быть просто встроен, заключается в том, что он имеет модели с внешними ключами, которые имеют смысл только при редактировании с ним, и это имеет смысл только при редактировании с помощью blog
.
Для страницы post
admin, я изменил часть "fieldset.html" на:
{% if field.is_readonly %}
<p>{{ field.contents }}</p>
{% else %}
{{ field.field }}
{% endif %}
к
{% if field.is_readonly %}
<p>{{ field.contents }}</p>
{% else %}
{% ifequal field.field.name "blog" %}
<p>{{ field.field.form.instance.blog_link|safe }}</p>
{% else %}
{{ field.field }}
{% endifequal %}
{% endif %}
чтобы создать ссылку на страницу blog
admin, где blog_link
- это метод в модели:
def blog_link(self):
return '<a href="%s">%s</a>' % (reverse("admin:myblog_blog_change",
args=(self.blog.id,)), escape(self.blog))
Я не смог найти id
экземпляра blog
где-либо вне field.field.form.instance
.
На странице blog
admin, где post
является встроенным, я модифицировал часть "stacked.html" из:
<h3><b>{{ inline_admin_formset.opts.verbose_name|title }}:</b>
<span class="inline_label">{% if inline_admin_form.original %}
{{ inline_admin_form.original }}
{% else %}#{{ forloop.counter }}{% endif %}</span>
к
<h3><b>{{ inline_admin_formset.opts.verbose_name|title }}:</b>
<span class="inline_label">{% if inline_admin_form.original %}
{% ifequal inline_admin_formset.opts.verbose_name "post" %}
<a href="/admin/myblog/post/{{ inline_admin_form.pk_field.field.value }}/">
{{ inline_admin_form.original }}</a>
{% else %}{{ inline_admin_form.original }}{% endifequal %}
{% else %}#{{ forloop.counter }}{% endif %}</span>
чтобы создать ссылку на страницу post
admin, так как здесь я смог найти id
, хранящийся в поле внешнего ключа.
Я уверен, что есть лучший, более общий способ добавления ссылок на формы администратора, не повторяя себя; что это?