Получение ошибки с 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 в шаблон в качестве контекста

Вернуться на верх