Django 错误 - 值错误:字段'id'期望一个数字,但得到'company'



我目前正在django中编写一个名为account的应用程序,现在一切都工作得很好(就像通常发生的那样),但是我不得不在我的models.py文件中添加更多信息,突然之间,我在运行迁移时遇到了问题,当然作为django爱好者,通常的方法是删除迁移文件夹中的所有迁移,删除数据库,最后运行通常的命令集。

不幸的是,这一次,这个技巧并没有解决我的问题,我得到以下错误:

ValueError:字段'id'期望一个数字,但得到'company'.

当我输入python manage.py migrate,运行迁移没有问题,并且创建了迁移0001文件和数据库时,出现该错误,但是当我运行migrate命令时,仍然出现该错误。

models.py

from django.db import models
from django.conf import settings
from django_countries.fields import CountryField
from phone_field import PhoneField
from djmoney.models.fields import MoneyField
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
email = models.EmailField(blank=True,null=True)
role = models.TextField(blank=True)
location = models.TextField(blank=True)
photo = models.ImageField(upload_to='users/%Y/%m/%d', blank=True)
def __str__(self):
return self.user
class Company(models.Model):
company = models.CharField(blank=True, max_length=30)
def __str__(self):
return self.company
class Client(models.Model):
firstname = models.CharField(blank=True, max_length=30)
lastname = models.CharField(blank=True, max_length=15)
company = models.ForeignKey(Company, on_delete=models.CASCADE, default="company")
position = models.CharField(blank=True, max_length=15)
country = CountryField(blank_label='(select country)')
email = models.EmailField(blank=True, max_length=100, default="this_is@n_example.com")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
phone = PhoneField(default="(XX)-XXX-XXX")
def __str__(self):
return f'{self.firstname}'
class Leads(models.Model):
CHOICES = (
('Illumination Studies','Illumination Studies'),
('Training','Training'),
('Survey Design','Survey Design'),
('Software License','Software License')
)
STATUS = (('Open','Open'),
('Closed','Closed'),
('Canceled', 'Canceled')
)
project_id = models.BigAutoField(primary_key=True)
company = models.ForeignKey(Company, on_delete=models.CASCADE, default="company")
agent = models.ForeignKey(Profile, on_delete=models.CASCADE, default="agent")
created_at = models.DateTimeField(auto_now_add=True)
point_of_contact = models.CharField(blank=True, max_length=30)
expected_revenue = MoneyField(max_digits=14, decimal_places=2, default_currency='USD')
expected_licenses = models.IntegerField(blank=True)
country = CountryField(blank_label='(select country)')
status = models.CharField(max_length=10,choices=STATUS)
estimated_closing_date = models.DateField(blank=True)
services = models.CharField(max_length=20,choices=CHOICES)

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

class CallReport(models.Model):
CHOICES = (
('Video Conference','Video Conference'),
('Phone Call','Phone Call'),
('Lunch Meeting', 'Lunch Meeting'),
('Client Offices', "Client Offices")
)
company = models.ForeignKey(Company, on_delete=models.CASCADE, default="company")
minutes_of_meeting = models.TextField(blank=True, null=True)
client_POC = models.ForeignKey(Client, on_delete=models.CASCADE, default='client')
date = models.DateField(blank=True)
ACTeQ_representative = models.ForeignKey(Profile, on_delete=models.CASCADE, default='agent')

def __str__(self):
return f'Call Report for {self.company}, on the {self.date}'
class Deal(models.Model):
project_id = models.ForeignKey(Leads, on_delete=models.CASCADE, default='id')
agent = models.ForeignKey(Profile, on_delete=models.CASCADE, default="agent")
service = models.ForeignKey(Leads, on_delete=models.CASCADE, related_name='service')
closing_date = models.DateField(auto_now_add=True)
client = models.ForeignKey(Client, on_delete=models.CASCADE,default='client')
licenses = models.ForeignKey(Leads,on_delete=models.CASCADE, related_name='licenses')
revenue = MoneyField(max_digits=14, decimal_places=2, default_currency='USD')
comments = models.TextField(blank=True,null=True)

回溯

Traceback (most recent call last):
tial...Traceback (most recent call last):
File "C:UsersfcolinaAppDataLocalPackagesPythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0LocalCachelocal-packagesPython39site-packagesdjangodbmodelsfields__init__.py", line 1823, in get_prep_value
return int(value)
ValueError: invalid literal for int() with base 10: 'company'

ValueError: Field 'id' expected a number but got 'company'.

任何想法?请不要建议删除db,迁移文件,当然,这解决了一些问题,特别是当一个表被添加时,那么显然db不知道,但在这种情况下,这个技巧不会解决问题

Client,LeadsCallReport中的default='company'选项必须是错误的,确保删除后执行以下命令:

python manange.py makemigrations

然后运行以下命令:

python manage.py migrate

" ForeignKey包含目标表的主键。如果该表中与公司值相关的主键是一个整数,那么默认值必须是该整数,而不是字符串

。然后,记得删除数据库和迁移文件夹中的迁移,然后

python manange.py makemigrations

执行如下命令:

python manage.py migrate

这应该能解决你的问题。