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