Получение ValueError: Поле 'id' ожидало число, но получило 'favicon.ico'

Я следую этому учебнику YT https://www.youtube.com/watch?v=A_j5TAhY3sw,

на 4:23:18, когда он вводит все данные, он может отправить, но я получаю следующую ошибку:

  1. ValueError: Поле 'id' ожидало число, но получило 'favicon.ico'. (На моей консоли VScode)

  2. Метод запроса: POST (В моем браузере)
    URL запроса:
    Версия Django: 4.0.4 Тип исключения: IntegrityError Значение исключения:
    Сбой ограничения NOT NULL: postions_postion.invoice_id Местоположение исключения: D:\Python\lib\site-packages\django\db\backends\sqlite3\base.py, строка 477, in execute

Все работает нормально, используя админку Django.

Это файл views.py

class AddPostionsFormView(FormView):
    form_class = PositionForm
    template_name = 'invoices/detail.html'

    def get_success_url(self):
        return self.request.path

Это model.py для позиций:

from django.db import models
from invoices.models import Invoice

# Create your models here.
class Postion(models.Model):#models.Models to inherit from django.db.models.Model
    invoice = models.ForeignKey(Invoice,on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField(blank=True,help_text="optional info") 
    amount=models.FloatField(help_text="in US $")
    created = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"Invoice : {self.invoice.number},postion title={self.title}" 

Это sqlite ddb:


id  title   description amount  created invoice_id
1   cleaning the kitchen        30  2022-05-25 07:56:38.750572  1
2   Tarnslating test clip   100 2022-05-28 05:26:46.370414  1
3   Test    Test des    300 2022-06-01 06:53:08.567545  10
4   Good    test des    222 2022-06-01 07:08:36.972521  10

Вот мега-ссылка, по которой я закончил курс: https://mega.nz/folder/EUoVhQbT#iN16PXAOcMv9Qr55MlUSIA

Я бы посоветовал поработать с конвертером путей <int:…> [Django-doc], чтобы убедиться, что он соответствует только последовательности цифр: сейчас он также соответствует всем строкам, включая медиафайлы, так:

urlpatterns = [
    path('', InvoiceListView.as_view(), name='main'), #with class based view add as.view
    #main refers main.html
    path('new/', InvoiceFormView.as_view(), name='create'),
    path('<int:pk>/', AddPostionsFormView.as_view(), name='detail'),
    path('<int:pk>/close/', CloseInvoiceView.as_view(), name='close'),
    path('<int:pk>/update/', InvoiceUpdateView.as_view(), name='update'),
    path('<int:pk>/delete/<int:position_pk>', InvoicePostionDeleteView.as_view(), name='Delete'),
]

Однако, возможно, лучше работать с префиксом invoice/ или чем-то еще, чтобы избежать путаницы.

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