为了账号安全,请及时绑定邮箱和手机立即绑定

Django 迁移值无效文字

Django 迁移值无效文字

FFIVE 2022-06-22 17:00:59
我对 Django 迁移功能有疑问。我试图向我的用户模型添加新字段,它看起来像这样。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余额是我添加的新内容,之后我收到了类似的消息要执行的操作:应用所有迁移:帐户、管理员、auth、authtoken、内容类型、论坛、帖子、会话、线程运行迁移:应用 accounts.0005_userprofile_balance...Traceback(最近一次调用最后):文件“manage.py”,第 15 行,在 execute_from_command_line(sys.argv) 文件“C:\Users\Rade\Desktop\rengorum-master\backend\env\lib\site-packages\django\core\management__init__.py”中,第 371 行,在 execute_from_command_line 实用程序中.execute() 文件“C:\Users\Rade\Desktop\rengorum-master\backend\env\lib\site-packages\django\core\management__init__.py”,第 365 行,在执行 self.fetch_command(子命令)中。 run_from_argv(self.argv) 文件“C:\Users\Rade\Desktop\rengorum-master\backend\env\lib\site-packages\django\core\management\base.py”,第 288 行,在 run_from_argv self.execute(*args, **cmd_options) 文件“C:\Users\Rade\Desktop\rengorum-master\backend\env\lib\site-packages\django\core\management\base.py”中,行335,在执行输出 = self.handle(*args, **options) 文件“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 行,迁移状态 = 收到该消息后,我尝试将默认值设置为 0.00,但它仍然是相同的消息,我删除了余额字段并仍然收到相同的消息。有任何想法吗?
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

这基本上是一个迁移问题,因为迁移文件是根据您的初始代码生成的,并且在迁移时,这些迁移文件正在执行并引发错误。


我认为您可以使用以下任一解决方案来修复它:


解决方案一

首先,您应该删除运行时创建的目录内的迁移文件(即0003_auto_<some id>.py)。如果您不确定要删除哪一个,请检查数据库中的表并查看它已应用到哪些迁移。删除最后一个迁移文件(或多个文件)后,您需要将默认值更改为. 然后你应该运行 makemigrations 和 migrate 命令。<app>/migrationspython manage.py makemigrationsdjango_migrations0


解决方案二

将默认值更改为0in models。然后更改在模型中添加字段时创建的迁移文件,如下所示:


    operations = [

        migrations.AddField(

            model_name='userprofile',

            name='balance',

            field=models.BigIntegerField(default=0),  # instead of default='0'

        ),

此外,当您修复默认值并重新运行迁移命令时,您应该删除其他迁移文件(如果它们已生成)。


查看完整回答
反对 回复 2022-06-22
?
慕标5832272

TA贡献1966条经验 获得超4个赞

BigIntegerField 默认值需要是整数而不是引号:

balance = models.BigIntegerField(default=0)

或者,如果您需要小数:

balance = models.DecimalField(max_digits=6, decimal_places=2, default=0)

或使用 MoneyField https://github.com/django-money/django-money


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信