ValueError阻止我在Django中迁移

时间:2016-05-07 04:11:16

标签: django python-3.x

我是Django的新手,主要是通过教程。我试图创建一个具有作者字段的模型。在我进行迁移过程并使用makemigrations的某个时刻,我在控制台中收到一系列消息,说明我需要为模型中的许多字段设置默认值。所以对于作者我放了default='someauthor'

我后来删除了这些默认值,仍然对为什么会发生这种情况感到困惑。然后,我经历了“makemigrations'再次,这些消息不再提示我。我忘了我做了什么来改变它。

然而,当我尝试迁移&python manage.py migrate'我收到这个错误:

ValueError: invalid literal for int() with base 10: 'someauthor'

我已删除对"默认='某些作者'"''''''''但是这个错误仍然存​​在。我将补充一点,我有两个模型,每个模型都引用一个作者:

author = models.ForeignKey(User, related_name='tutorial_posts')

author = models.ForeignKey(User, related_name='blog_posts')

我觉得这导致了这个问题。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

ForeignKey字段存储来自另一个表的id,默认情况下为NodeID = {% CurrentDocument.NodeID %} 。如果您将默认值添加为int,则无法将其转换为int并为您提供此错误:

string

您可以在控制台中尝试检查:

ValueError: invalid literal for int() with base 10: 'someauthor'

我建议您使用默认的int值或设置In [3]: int('someauthor') --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-3-3c4d496afcf9> in <module>() ----> 1 int('someauthor') ValueError: invalid literal for int() with base 10: 'someauthor'

null=True

答案 1 :(得分:0)

我遇到了同样的问题,无法进行其他任何迁移

我能够通过在项目目录中搜索作为默认值传递的字符串来解决,在您的情况下为'someauthor'

您应该能够在Migrations文件夹中找到一个.py迁移文件。

`
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('accounts', '0004_auto_20191221_2233'),
    ]

    operations = [
        migrations.RemoveField(
            model_name='useraccount',
            name='username',
        ),
        migrations.AddField(
            model_name='useraccount',
            name='user',
            field=models.ForeignKey(default='string', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
            preserve_default=False,
        ),
    ]`

default='string'更改为1