Python 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'

我对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
平衡是我添加的新内容,之后我收到的消息如下

要执行的操作:应用所有迁移:帐户、管理员、身份验证、, 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!!请考虑一下。