Django使迁移变得古怪

Django使迁移变得古怪,django,django-models,Django,Django Models,问题: 当我运行python makemigrations myapp--settings=mysettings时,它会在我的一个模型中检测到我没有做的更改。也就是说,它检测添加到我的模型中的“id”字段,而没有默认值。因此,它希望我提供一次性违约。当我执行此操作时,它无法迁移,并给出一般错误消息,例如in()参数必须是字符串或数字,而不是(无论我输入什么,整数、字符串、日期时间,任何一次性的)。令人恼火的是,没有添加ID字段,我不知道为什么会检测到这种更改 Django版本:1.11 Pyth

问题: 当我运行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()
更新: 我现在执行了一个--false迁移以避免处理此问题,但是在运行测试时,测试数据库出现以下错误:

django.db.utils.OperationalError: (1067, "Invalid default value for 'id'")
它说它需要多对多的id才能工作,但在我看来,它自动设置了id并创建了存储关系的表,这就是为什么我认为这一错误首先发生的原因。如前所述,在伪造此迁移之后,实际应用程序在形成manytomy关系方面没有问题,即使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(在真实数据库中伪造)

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

django.db.utils.OperationalError: (1060, "Duplicate column name 'id'")
如前所述,此版本的第二个迁移文件将生成原始结果:

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

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

ValueError: "<Outage: Outage object>" needs to have a value for field "id" before this many-to-many relationship can be used.
ValueError:“”需要有字段“id”的值,才能使用此多对多关系。

根据新信息,您有什么想法?

可以发布您的模型吗?您是否尝试过以不同的方式创建数据库表,或者尝试过使用sql引擎进行手动迁移?这主要发生在从外部添加东西时(不使用django orm)。这是一个很难回答的问题,因为如果没有占卜能力,很难重现这个问题。我敢打赌,如果你用一个最小的应用程序来更新这个问题,让别人重现这个问题,你会得到更好的答案。@MohitC我不会用sql引擎进行任何手动迁移。我完全通过django与MySQL db实例进行交互。@PauloScardine我将在gist中制作一个SSCCE,并将其链接到这里。我只讨论了第一个问题。稍后我将为第二期制作一个新的线程。一个线程上有两个问题是没有意义的。你能发布你的模型吗?您是否尝试过以不同的方式创建数据库表,或者尝试过使用sql引擎进行手动迁移?这主要发生在从外部添加东西时(不使用django orm)。这是一个很难回答的问题,因为如果没有占卜能力,很难重现这个问题。我敢打赌,如果你用一个最小的应用程序来更新这个问题,让别人重现这个问题,你会得到更好的答案。@MohitC我不会用sql引擎进行任何手动迁移。我完全通过django与MySQL db实例进行交互。@PauloScardine我将在gist中制作一个SSCCE,并将其链接到这里。我只讨论了第一个问题。稍后我将为第二期制作一个新的线程。一个线程上有两个问题是没有意义的。
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.