我刚刚创建了一个 proxy model令 manage.py makemigrations
使用 migrations.CreateModel
操作创建新的迁移文件感到惊讶。
代理模型不会创建新的数据库表,它只是同一数据集的不同 python 接口(interface),实际上 manage.py sqlmigrate my_app_label 0042
不返回任何内容。
我认为它可能用于创建代理模型 ContentType
但如果它们不存在,则按需创建。
是否用于触发创建代理模型权限?有一个 6 year old open bug关于代理模型权限,所以我不太确定这部分现在应该如何工作......
它使用 Django 1.8
进行测试。
编辑:澄清一下,Django
创建了一个对新代理模型没有任何作用的迁移,所以我们不希望 Django
不创建如果没有用,首先要迁移?
是否有迁移有用的用例?
最佳答案
啊,但是如果你在你的编辑器中打开迁移,你会发现它实际上是一个空的迁移!这是一个例子
class Migration(migrations.Migration):
dependencies = [
('stackoverflow', '0009_auto_20160622_1507'),
]
operations = [
migrations.CreateModel(
name='MyArticle',
fields=[
],
options={
'proxy': True,
},
bases=('stackoverflow.article',),
),
]
如果你运行 ./manage.py sqlmigrate myapp 0010
(这是对应于我上面的迁移的数字),你得到的是下一行的内容(什么都没有)。
这是因为 fields
迁移部分为空且 option
包括 proxy = True
.此设置可防止任何 SQL
不会为此迁移执行,并且原始表保持不变。
所以你可能会问,为什么Django
费心创建一个空的迁移?这是因为在未来的迁移中,代理模型可能会被另一个模型引用。
关于python - 为什么 Django 会为代理模型创建迁移文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37988914/