ValueError: Поле 'bid' ожидало число, но получило ' '

Я создаю сайт аукциона, используя Django. При использовании команды Migrate выдается ошибка "ValueError: Field 'bid' expected a number but got " ". Код файла models.py следующий:

    from django.contrib.auth.models import AbstractUser
from django.db import models
from django.db.models.base import Model
from django.db.models.deletion import CASCADE
from django.db.models.fields import CharField
from django.utils import timezone


class User(AbstractUser):
    pass


class Category(models.Model):
    category = models.CharField(max_length=64)

    def __str__(self):
        return f'{self.category}'


class AuctionListing(models.Model):
    item_name = models.CharField(max_length=100)
    item_image = models.ImageField(upload_to="products", null=True, blank=True)
    detail = models.TextField()
    price = models.IntegerField()
    last_bid = models.ForeignKey('Bid', on_delete=models.CASCADE, blank=True, null=True, related_name='lst')
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='publisher_listing', null=True, blank=True)
    watchers = models.ManyToManyField(User, blank=True, related_name='watched_list')
    pub_date = models.DateTimeField(null=True)
    deadline = models.DateTimeField(null=True)
    list_category = models.ForeignKey(Category, on_delete=models.CASCADE, null=True, related_name='sortion')
    closed = models.BooleanField(default=False)
    
    def __str__(self):
        return f'{self.item_name} - {self.price}'


class Bid(models.Model):
    p_bid = models.IntegerField()
    user = models.ForeignKey(User, on_delete=CASCADE)
    auction = models.ForeignKey(AuctionListing, on_delete=CASCADE)
    bid_date = models.DateTimeField(timezone.now)

    def __str__(self):
        return '%s' % (self.bid)


class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=CASCADE)
    com = models.TextField()
    pub_date = models.DateField()
    com_item = models.ForeignKey(AuctionListing, on_delete=models.CASCADE, related_name='get_comment')

    def __str__(self):
        return f'{self.user} - {self.pub_date}'
    

Код файла views.py выглядит следующим образом:

Код urls.py выглядит следующим образом:

from django.urls import path
from django.contrib.auth import views as auth_views
from django.conf import settings
from django.conf.urls.static import static

from .views import *

urlpatterns = [
    path("", index, name="index"),
    path("login", login_view, name="login"),
    path("logout", logout_view, name="logout"),
    path("register", register, name="register"),
    path('create', create_listing, name='create_listing'),
    path('listings/<int:pk>', listing, name='listing')
    ]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Файл миграций:


    
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
        ('auctions', '0012_auto_20211020_0737'),
    ]

    operations = [
        migrations.RenameField(
            model_name='bid',
            old_name='bid',
            new_name='p_bid',
        ),
        migrations.AlterField(
            model_name='auctionlisting',
            name='last_bid',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='lst', to='auctions.bid'),
        ),
    ]

Модель заявки и поле, кажется, в порядке, поэтому я не знаю, где проблема. Пожалуйста, помогите мне с этой проблемой. Я буду благодарен вам.

В вашем models.py замените строку

last_bid = models.ForeignKey('Bid', on_delete=models.CASCADE, blank=True, 
null=True, related_name='lst')

с этим

last_bid = models.ForeignKey(Bid, on_delete=models.CASCADE, blank=True, 
null=True, related_name='lst')

Вы вводите Bid в строке. Также есть одна ошибка в вашем классе Bid

def __str__(self):
    return '%s' % (self.bid)

замените его на

def __str__(self):
    return '%s' % str(self.p_bid)

Надеюсь, это работает Спасибо

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