Получение ошибки с django - Поле 'id' ожидало число, но получило '{}'
Я создаю книжный магазин, и на странице одного товара над названием книги у меня есть ссылка, которая направляет покупателя на страницу профиля автора. Ссылка отображается нормально, но когда я нажимаю на нее, то получаю следующую ошибку:
ValueError at /book_details/{}
Поле 'id' ожидало число, но получило '{}'.
Метод запроса: GET
URL запроса: http://127.0.0.1:8001/book_details/%7B%7D
Версия Django: 4.0.1
Тип исключения: ValueError
Значение исключения:
Поле 'id' ожидало число, но получило '{}'.
Exception Location: /Users/ariethan/Documents/django_apps/ibdb/virt/lib/python3.8/site-packages/django/db/models/fields/init.py, строка 1824, in get_prep_value
Python Executable: /Users/ariethan/Documents/django_apps/ibdb/virt/bin/python
Версия Python: 3.8.9
Python Path:
['/Users/ariethan/Documents/django_apps/ibdb/ibdb',
'/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python38.zip',
'/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8',
'/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/lib-dynload',
'/Users/ariethan/Documents/django_apps/ibdb/virt/lib/python3.8/site-packages'].
Время сервера: Thu, 13 Jan 2022 09:43:37 +0000
/Users/ariethan/Documents/django_apps/ibdb/ibdb/ibdb_app/views.py, line 53, in book_details
book_details = Book.objects.get(pk=book_id)
view.py
models.py
from django.db import models
class BookAuthor(models.Model):
book_authors_first_name = models.CharField('Author First Name', max_length=200)
book_authors_last_name = models.CharField('Last Name', max_length=200)
book_authors_biography = models.TextField('Biography', max_length=3000,null=True)
book_authors_photograph = models.ImageField(null=True,blank=True,upload_to='images/authors')
def __str__(self):
return self.book_authors_first_name + ' ' + self.book_authors_last_name
class BookGenre(models.Model):
book_genre_title = models.CharField('Book Genres:', max_length=200)
def __str__(self):
return self.book_genre_title
class Book(models.Model):
book_title = models.CharField('Book Title:', max_length=300)
book_publication_date = models.DateTimeField('Publication Date:')
book_description = models.TextField('Description:', max_length=1000)
book_ISBN = models.CharField('ISBN:', max_length=100,null=True)
book_genre = models.ManyToManyField(BookGenre, max_length=100)
book_amazon_link = models.URLField('Amazon page link',null=True)
book_cover_image = models.ImageField(null=True,blank=True,upload_to='images/')
book_author = models.ForeignKey(BookAuthor, null=True, related_name='authorwriter', on_delete=models.CASCADE)
def __str__(self):
return self.book_title
class BookCharactersAndSettings(models.Model):
book_character_name = models.CharField('Character Name:',null=True,max_length=200)
book_character_details = models.CharField('Character Details:',null=True,max_length=200)
book_character_role = models.CharField('Character Role:',null=True,max_length=200)
book_setting = models.CharField('Setting:',max_length=1000)
def __str__(self):
return self.book_character_name
html
<a href="{% url 'author_details' ath.id %}">{{book_details.book_author}}</a>
Я попробовал несколько решений, но ни одно из них не сработало.
hi потому что вы передаете {} в ваш URL /book_details/{} и в вашем представлении пытаетесь получить целочисленный id как : /book_details/12
если внимательно прочитать ошибки можно найти
ValueError at /book_details/{}
Field 'id' expected a number but got '{}'.
Request Method: GET
Request URL: http://127.0.0.1:8001/book_details/%7B%7D
Думаю, это может быть полезно:
def author_details(request,ath_id):
author_details = BookAuthor.objects.get(ath_id=author_details)
return render(request,'author_details.html',{
'author_details':author_details,
})
замените ваш html-код на
<a href="{% url 'author_details' author_details.id %}">{{book_details.book_author}}</a>
потому что вы не передали ath
в шаблон в качестве контекста