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)
Надеюсь, это работает Спасибо