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