我刚刚创建了一个代理模型 https://docs.djangoproject.com/en/1.9/topics/db/models/#proxy-models并惊讶地发现manage.py makemigrations
创建一个新的迁移文件migrations.CreateModel
手术。
代理模型不会创建新的数据库表,它只是同一数据集的不同 python 接口,实际上manage.py sqlmigrate my_app_label 0042
什么也不返回。
我认为它可能用于创建代理模型ContentType
但如果它们不存在,则会按需创建。
是否用于触发代理模型权限的创建?有一个6 年前的开放 bug https://code.djangoproject.com/ticket/11154关于代理模型权限,所以我不太确定这部分现在应该如何工作......
It used Django 1.8
来测试这个。
Edit: 澄清,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
费心去创建一个空的迁移吗?这是因为代理模型可能会在将来的迁移中被另一个模型引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)