Django — доступ к _set со страницы смены администратора

#django #django-models #django-templates

#django #django-модели #django-шаблоны

Вопрос:

Давайте рассмотрим стандартный пример

 class Author(models.Model):
  name = models.CharField(max_length=100)

class Book(models.Model):
  title = models.CharField(max_length=100)
  author = models.ForeignKey(Author)
  #... Many other fields ...
  

Из шаблона изменения администратора Author пытается получить доступ к связанным книгам

 <ul>
  {% for book in original.book_set.all %}
    <li>
      <a href="{% url admin:myapp_manager_change book.id %}">Edit {{ book }}</a>
    </li>
  {% endfor %}
</ul>
  

Я получаю

При рендеринге не обнаружено никакого соответствия: обратный для ‘myapp_manager_change’ с аргументами ‘(1L,)’ и аргументами ключевого слова ‘{}’ не найден.

Почему?
И как я могу получить к этому доступ book_set ?

Ответ №1:

Проверьте документы по изменению URL-адресов администратора.

Вы должны заменить «myapp» своим реальным приложением:

 admin:{{ app_label }}_{{ model_name }}_change object_id
  

Итак, если ваше приложение называется library, а название вашей модели — book, ссылка будет:

 <a href="{% url admin:library_book_change book.id %}">Edit {{ book }}</a>
  

Комментарии:

1. Спасибо, это настолько очевидно, что я пытался использовать URL reversing system , не зная.

Ответ №2:

book_set на самом деле хорошо работает в вашем примере, потому что исключение возникает изнутри for цикла. Похоже, проблема связана с именем представления.

Попробуйте это:

 {% url admin:myapp_book_change book.id %}
  

Комментарии:

1. Спасибо, я изменил myapp на my_actual_app и manager на my_actual_model 🙂