loaddata命令使用将来的模型状态

时间:2016-02-18 13:56:16

标签: django django-models django-migrations django-fixtures

所以...这是我遇到的问题:

我的Django项目被破坏了:我登陆默认主页说start projectmanage.py runserver [::]:8000run migrate

全部我的迁移已应用(数据库处于正确的状态),所以我不明白发生了什么。 (所以如果有人对此重置有任何线索,我会很高兴看到他/她的回答)

无论如何,我运行了manage.py reset_dbmanage.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'")

使用 future 应用程序模型定义

对Fixture进行反序列化

我了解loaddata命令使用最新应用模型定义对灯具进行反序列化,但这有点烦人,因为enabled字段仅在以后的迁移中添加

是否有任何选项会强制loaddata使用之前迁移建立的应用模型定义反序列化灯具?

1 个答案:

答案 0 :(得分:1)

这不是您正在寻找的答案,但让我给您一个可能有助于解决此问题的视角。使用数据迁移,以便在导入此数据时应用程序的状态始终相同。

https://docs.djangoproject.com/en/1.9/topics/migrations/#data-migrations

$ ./manage.py makemigrations [appname] --empty

0012_some_migration.py

# -*- 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),
    ]