Django makemigrations wonkyness

时间:2017-10-16 19:38:45

标签: django django-models

问题:     当我运行python makemigrations myapp --settings=mysettings时,它检测到我没有制作的某个模型的更改。也就是说,它会在没有默认值的情况下检测添加到我的模型的“id”字段。因此,它希望我提供一次性默认值。当我这样做,它无法迁移给我一般的错误消息,如in()参数必须是一个字符串或数字,而不是(无论我输入什么,一个整数,一个字符串,一个日期时间,任何一次性的东西)。令人烦恼的是,没有添加ID字段,我不确定为什么会发现这种变化。

Django版本: 1.11

Python版本: 2.7.10

有没有人能解决这个问题? (将根据要求添加更新和更多信息。)

型号: 这是接收随机添加ID的模型。

class Outage(models.Model):
    event_start = models.DateTimeField()
    event_end = models.DateTimeField()
    affected_products = models.ManyToManyField('products.Product')
    severity = models.CharField(max_length=50)
    summary = models.TextField()
    description = models.TextField()
    impacted_guests = models.IntegerField()

更新 我执行了 - fake 迁移以避免现在处理此问题,但是在运行测试时,测试数据库出现以下错误:

django.db.utils.OperationalError: (1067, "Invalid default value for 'id'")

它说它需要多对多的id工作,但在我看来它会自动设置并创建存储关系的表,这就是为什么我认为这个错误一开始就发生了。如上所述,在伪造此迁移之后,即使我没有明确设置id,实际应用程序也可以很好地形成多种关系。

问题是,我似乎无法运行任何测试,因为测试数据库需要某种明确的手持设置来正确设置它。以下是有关我的迁移的详细信息:

原始迁移

operations = [
        migrations.CreateModel(
            name='Outage',
            fields=[
                ('event_start', models.DateTimeField()),
                ('event_end', models.DateTimeField()),
                ('severity', models.CharField(max_length=50)),
                ('affected_products', models.ManyToManyField('products.Product')),
                ('summary', models.TextField()),
                ('description', models.TextField()),
                ('impacted_guests', models.IntegerField()),
            ],
        ),
    ]

第二次迁移:无默认ID(在真实数据库中伪造)

operations = [
        migrations.AddField(
            model_name='outage',
            name='id',
            field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
            preserve_default=False,
        ),
    ]

此迁移文件在运行测试时会产生以下错误。

django.db.utils.OperationalError: (1060, "Duplicate column name 'id'")

如前所述,此版本的第二个迁移文件产生原始结果:

第二次迁移:默认ID(在真实数据库中伪造)

operations = [
        migrations.AddField(
            model_name='outage',
            name='id',
            field=models.AutoField(auto_created=True, default=1, primary_key=True, serialize=False, verbose_name='ID'),
            preserve_default=False,
        ),
    ]

最后,在没有任何第二个迁移文件的情况下运行测试会产生以下结果:

ValueError: "<Outage: Outage object>" needs to have a value for field "id" before this many-to-many relationship can be used.

给出新信息的任何想法?

0 个答案:

没有答案