Python Django迁移值无效文本
我对Django迁移函数有问题。 我试图向我的用户模型中添加新字段,结果是这样的Python Django迁移值无效文本,python,django,python-3.x,django-rest-framework,Python,Django,Python 3.x,Django Rest Framework,我对Django迁移函数有问题。 我试图向我的用户模型中添加新字段,结果是这样的 class UserProfile(models.Model): """ Model to represent additional information about user """ user = models.OneToOneField( User, on_delete=models.CASCADE, related_name='profile'
class UserProfile(models.Model):
""" Model to represent additional information about user """
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
related_name='profile'
)
bio = models.TextField(
max_length=2000,
blank=True,
default=''
)
# we use URL instead of imagefield because we'll use 3rd party img hosting later on
avatar = models.URLField(default='', blank=True)
status = models.CharField(max_length=16, default='', blank=True)
name = models.CharField(max_length=32, default='')
balance = models.BigIntegerField(default='0')
def __str__(self):
return self.user.username
平衡是我添加的新内容,之后我收到的消息如下
要执行的操作:应用所有迁移:帐户、管理员、身份验证、,
authtoken、内容类型、论坛、帖子、会话、正在运行的线程
迁移:应用帐户.0005\u用户配置文件\u余额…回溯
(最后一次调用):文件“manage.py”,第15行,在
从命令行(sys.argv)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\core\management\uuuu init\uuuu.py”执行,
第371行,从命令行执行命令行
utility.execute()文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\core\management\uuuu init\uuuu.py”,
第365行,执行中
self.fetch_命令(子命令)。从_argv(self.argv)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\core\management\base.py”的第288行运行_
self.execute(*args,**cmd_options)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\core\management\base.py”,执行中第335行
output=self.handle(*args,**选项)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\core\management\commands\migrate.py”,
第200行,在句柄中
fake_initial=fake_initial,文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\migrations\executor.py”,
第117行,第1行
state=self.\u迁移\u所有\u转发(state、plan、full\u plan、fake=fake、fake\u initial=fake\u initial)文件
“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\migrations\executor.py”,
第147行,全部向前移动
state=self.apply\u迁移(state,migration,fake=fake,fake\u initial=fake\u initial)文件
“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\migrations\executor.py”,
第244行,在应用程序中
state=migration.apply(state,schema_editor)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\migrations\migration.py”,
第122行中的“应用”
数据库转发(self.app\u标签、模式编辑器、旧状态、项目状态)文件
“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\migrations\operations\fields.py”,
第84行,在数据库中
字段,文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\backends\sqlite3\schema.py”,
第315行,在添加字段中
self.\u remake\u table(model,create\u field=field)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\backends\sqlite3\schema.py”,
第187行,在表中
self.effective\u默认(创建\u字段)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\backends\base\schema.py”,
第240行,默认为“有效”
default=field.get\db\u prep\u save(默认,self.connection)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\models\fields\uuuuuuuu init\uuuuuuuuuuu.py”,
第767行,在get_db_prep_save中
返回self.get_db_prep_value(value,connection=connection,prepared=False)文件
“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\models\fields\uuuu init\uuuu.py”,
第762行,在get_db_prep_值中
value=self.get\u prep\u value(value)文件“C:\Users\Rade\Desktop\rengorum master\backend\env\lib\site packages\django\db\models\fields\uuuu init\uuuu.py”,
第1826行,在get_prep_值中
返回int(value)ValueError:以10为基数的int()的文本无效:“”
收到该消息后,我尝试将默认值设置为0.00,但它仍然是同一条消息,我删除了余额字段并仍然收到同一条消息。
有什么想法吗?这基本上是一个迁移问题,因为迁移文件是根据初始代码生成的,迁移时,这些迁移文件正在执行并抛出错误 我认为您可以使用以下任一解决方案来修复它: 解决方案一 首先,您应该删除
/migrations
目录中的迁移文件(即0003\u auto_uuu.py
),该文件是在运行python manage.py makemigrations
时创建的。如果您不确定要删除哪一个,请检查数据库中的django_migrations
表,查看应用了哪些迁移。删除最后一个(或多个)迁移文件后,需要将默认值更改为0
。然后应该运行makemigrations和migrate命令
解决方案二
在模型中将默认值更改为0
。然后更改在模型中添加字段时创建的迁移文件,如下所示:
operations = [
migrations.AddField(
model_name='userprofile',
name='balance',
field=models.BigIntegerField(default=0), # instead of default='0'
),
此外,在修复默认值并重新运行迁移命令时,还应删除其他迁移文件(如果生成了这些文件)。BigIntegerField默认值需要为整数,而不是引号:
balance = models.BigIntegerField(default=0)
或者,如果您需要小数:
balance = models.DecimalField(max_digits=6, decimal_places=2, default=0)
或者使用MoneyField我知道default='0'是不正确的,但仍然是相同的消息,没有“您是否在没有声明任何字段选项的情况下尝试过?”?只要简单地
balance=models.BigIntegerField()
Great!!请考虑一下。