Может ли Django работать с несколькими id в одном представлении?
Для выполнения упражнений по Django 4.2 и Python я создаю проект на Django, чтобы пользователи могли консультироваться и оценивать прочитанные книги. Некоторые книги уже есть в базе данных в таблице "Книга" в приложении "Библиотека". Моя цель состоит в том, чтобы пользователи добавляли эти книги в свой пользовательский кабинет, который сохранялся бы в таблице "UserBook" приложения "readers", чтобы они могли позже добавить заметки или классификацию.
Чтобы реализовать эту логику, нужно, чтобы пользователь искал книгу, если она существует в базе данных "Книга" приложения "Библиотека", заходил на страницу книги и использовал кнопку "Добавить в мои книги", она автоматически добавляется (ее скопированные данные) в таблицу "Userbook" приложения "Читатели" и отображается на странице книги в области пользователя.
(https://i.stack.imgur.com/0kB1m.png)
Это таблица "Книга" из приложения "Библиотека"
введите описание изображения здесь Это код для url path('book/int:id/', views.single_book, name='single_book'), который содержит форму и кнопку "Добавить в мои книги".
(https://i.stack.imgur.com/oTntg.png) Это таблица "UserBook" приложения "readers"
(https://i.stack.imgur.com/Wx9C4.png) Это представление для страницы, которая представляет книгу в пользовательской области по пути('review/my_books/int:user_book_id/', views.book_review, name='book_review'),
Вот здесь у меня возникают трудности, потому что, несмотря на запись в базу данных, в таблице "Userbook", url review/my_books/int:user_book_id представляет id из таблицы "Book", а не новый id, который находится в таблице "Userbook", таким образом, выдавая ошибку при представлении url правильно. Возможно ли изменить это представление, чтобы сохранить эту логику, или как я могу это сделать?
Проблема
Я думаю, что проблема возникает в строке 6 book = get_object_or_404(Book, pk=user_book_id)
. Вы выполняете поиск в таблице Book
путем фильтрации по первичному ключу из таблицы UserBook
.
Решение
В HTML вместо user_book_id
следует отправить book_id
.