猿问

Django 迁移值无效文字

我对 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,但它仍然是相同的消息,我删除了余额字段并仍然收到相同的消息。有任何想法吗?


FFIVE
浏览 118回答 2
2回答

呼啦一阵风

这基本上是一个迁移问题,因为迁移文件是根据您的初始代码生成的,并且在迁移时,这些迁移文件正在执行并引发错误。我认为您可以使用以下任一解决方案来修复它:解决方案一首先,您应该删除运行时创建的目录内的迁移文件(即0003_auto_<some id>.py)。如果您不确定要删除哪一个,请检查数据库中的表并查看它已应用到哪些迁移。删除最后一个迁移文件(或多个文件)后,您需要将默认值更改为. 然后你应该运行 makemigrations 和 migrate 命令。<app>/migrationspython manage.py makemigrationsdjango_migrations0解决方案二将默认值更改为0in models。然后更改在模型中添加字段时创建的迁移文件,如下所示:&nbsp; &nbsp; operations = [&nbsp; &nbsp; &nbsp; &nbsp; migrations.AddField(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; model_name='userprofile',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name='balance',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; field=models.BigIntegerField(default=0),&nbsp; # instead of default='0'&nbsp; &nbsp; &nbsp; &nbsp; ),此外,当您修复默认值并重新运行迁移命令时,您应该删除其他迁移文件(如果它们已生成)。

慕标5832272

BigIntegerField 默认值需要是整数而不是引号:balance&nbsp;=&nbsp;models.BigIntegerField(default=0)或者,如果您需要小数:balance&nbsp;=&nbsp;models.DecimalField(max_digits=6,&nbsp;decimal_places=2,&nbsp;default=0)或使用 MoneyField&nbsp;https://github.com/django-money/django-money
随时随地看视频慕课网APP

相关分类

Python
我要回答