loaddata command deserializes fixture with a future model state
所以...这是我遇到的问题:
我的Django项目已损坏:我登陆默认主页,说start project,而manage.py runserver [::]:8000说run migrate。
所有迁移都已应用(数据库处于正确状态),所以我不知道发生了什么。 (因此,如果有人对此重置有任何了解,我将很高兴阅读他/她的回答)
无论如何,我分别运行了manage.py reset_db和manage.py syncdb,真正的问题出在这里:
最初的迁移成功了,没有任何问题,但是随后,我有一些通过数据迁移加载的夹具,并且由于
而失败
django.db.utils.OperationalError: Problem installing fixture 'scopes_fixtures.json': Could not load utils.MPTTScope(pk=0118cd35-e6dd-4a38-8cc8-f9cf07cfdd05): (1054,"Unknown column 'enabled' in 'field list'")
。
使用将来的应用程序模型定义对灯具进行反序列化
我知道loaddata命令使用最新的应用程序模型定义对设备进行反序列化,但这有点烦人,因为enabled字段仅在以后的迁移中添加。
是否有任何选项可以强制loaddata使用由先前迁移建立的应用程序模型定义对设备进行反序列化?
- 是否可以选择回滚到以前的迁移?
-
我的项目设置被完全破坏,Django迁移系统认为没有应用程序或数据库设置。因此,由于这些字段已经存在于MySQL中,因此无法回滚到以前的迁移,也无法运行manage.py migration命令。
-
您是否考虑过创建数据迁移?还是这是一个选择?根据文档,自1.7开始不推荐使用自动加载数据。应用状态将得到保证。当添加/编辑/删除字段时,intial_data.json总是不同步,进入并不断更新json可能很烦人。
-
@Victor您的意思是使用obj = MyObject.create(name ='test')创建迁移并运行它吗?我同意,JSON反序列化不会有问题,但是如果我有数百条记录,如何轻松实现呢?您是否有一个链接到灯具的负载折旧?在Django 1.8中,loaddata似乎仍然是有效的选项。
-
@NicolasW。参见docs.djangoproject.com/en/1.8/howto/initial-data/…。
这并非您要找的答案,但让我给您一个可以帮助解决此问题的观点。使用数据迁移,以便在导入此数据时应用程序的状态始终相同。
https://docs.djangoproject.com/zh-CN/1.9/topics/migrations/#data-migrations
1
| $ ./manage.py makemigrations [appname] --empty |
0012_some_migration.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
def import_data(apps, schema_editor):
ModelName = apps.get_model("yourappname","ModelName")
ModelName.objects.bulk_create([...])
class Migration(migrations.Migration):
dependencies = [
('yourappname', '0001_initial'),
]
operations = [
migrations.RunPython(import_data),
] |
- 谢谢维克多。确实,这不是我一直在寻找的答案,但是它将帮助我解决loaddata遇到的大多数问题。 :-)顺便说一句,您知道为什么Django使用最新的模型定义来加载使用先前模型状态创建的数据吗?
-
我认为在导入模型时会使用定义,因为直到Django迁移进入框架时,不同模型状态的概念才真正有意义。