python - 为什么 Django 会为代理模型创建迁移文件?

标签 python django django-migrations proxy-classes

我刚刚创建了一个 proxy modelmanage.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/

相关文章:

Django - order_by() 字符和数字

html - 背景url--图片路径

django - 迁移中未找到模型(apps.get_model 引发 LookupError)

python - 提取字符串中出现的百分比

python - 导入/包含配置 Python

django - 在 django admin 的模型字段中即时修改 verbose_name

django.db.utils.OperationalError : near "[]": syntax error

django - 如何伪造迁移以不创建特定的现有中间表

python - 如何从Python加载用tcl编写的dll文件

python - 如何在 Python3 文件中打印 __repr__? (不在 shell 中)