相关疑难解决方法(0)

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

我刚刚创建了一个代理模型,并且惊讶于manage.py makemigrations创建了一个带有migrations.CreateModel操作的新迁移文件.

代理模型不会创建新的数据库表,它只是同一数据集的不同python接口,并且实际上不manage.py sqlmigrate my_app_label 0042返回任何内容.

我认为它可能用于创建代理模型,ContentType但如果它们不存在则按需创建.

它是否用于触发代理模型权限的创建?代理模型权限有一个6岁的开放式bug,所以我不确定这个部分应该如何工作...

它用来Django 1.8测试这个.

编辑:澄清一下,Django创建一个对新代理模型没有任何作用的迁移,所以Django如果它没有用,我们不想在第一时间创建迁移吗?

是否存在迁移有用的用例?

python django proxy-classes django-migrations

15
推荐指数
2
解决办法
2004
查看次数

Django 1.7.1的迁移错误

在引入新应用程序(django-allauth)后执行迁移时出现错误.我不知道还有什么可以尝试以修复错误.我尝试了一些东西,但不幸的是它们似乎没有帮助.

运行manage.py migrate时:

File "D:\Python27\Lib\site-packages\django\db\migrations\state.py", line 71, 
in render raise     
InvalidBasesError("Cannot resolve bases for %r\nThis can happen if you are inheriting 
models from an app with migrations (e.g. contrib.auth)\n in an app with no migrations; 
see https://docs.djangoproject.com/en/1.7/topics/migrations/#dependencies for more" % 
new_unrendered_models)
django.db.migrations.state.InvalidBasesError: Cannot resolve bases for 
[<ModelState: 'blog.BlogPage'>, <ModelState: 'blog.BlogIndexPage'>]
This can happen if you are inheriting models from an app with migrations 
(e.g. contrib.auth) in an app with no migrations; see
https://docs.djangoproject.com/en/1.7/topics/migrations/#dependencies for more
Run Code Online (Sandbox Code Playgroud)

models.py

    from django.db …
Run Code Online (Sandbox Code Playgroud)

django django-allauth django-1.7 wagtail

6
推荐指数
2
解决办法
7561
查看次数

Django-变更迁移基础

由于某些原因,我想对模型进行重大更改。我想以某种方式重做整个设计,但是Django迁移实现通过不更新模型库来牢记以前的设计。

让我快速展示一下我之前所拥有的,然后现在所拥有的。

app1.TopLevel
  |_ app1.IntermediateLevel
    |_ app2.LowLevel
Run Code Online (Sandbox Code Playgroud)

我有3个这样的模型,那么现在我想把这个设计切成更适合我当前项目的模型,例如

app2.TopLevel
  |_ app2.LowLevel
Run Code Online (Sandbox Code Playgroud)

我的主要更改是,首先,我不再需要中间模型,其次,我不需要顶部保持app1.TopLevel这种方式。

我的数据没有问题(我进行了多次迁移,有些是使用Python将数据放入临时字段中,然后稍后将数据放回到正确的字段中并删除那些临时字段)。

我的问题是,当我们创建继承的模型时,我们要定义其基础;

app1.TopLevel
  |_ app1.IntermediateLevel
    |_ app2.LowLevel
Run Code Online (Sandbox Code Playgroud)

在那种情况下,我会得到类似

类“ LowLevel”中的本地字段“ toplevel_ptr”与基类“ IntermediateLevel”中类似名称的字段发生冲突

我阅读了官方文档和源代码(用于迁移),但到目前为止,我什么都没有看到。是否可以告知迁移系统我们更改了模型库(其父库)?

否则,我唯一的解决方案是创建新模型,运行python迁移以将数据从旧模型复制到新模型。然后删除旧模型并重命名新模型,以获得我想要的名称。

django

6
推荐指数
1
解决办法
529
查看次数