django-oscar2.1 在 is_public 字段上给出错误。这是一个模型加载问题

django-oscar2.1 giving errors on is_public field. Its a model loading issue

我正在迁移到 django-oscar2.1

我已经分叉目录应用程序,它有一些现有的迁移。新添加的字段 is_public 在迁移 #10 中。我有一个使用 create_from_breadcrumbs 方法的自定义迁移 #5。因此,当我尝试 运行 在新数据库迁移时迁移#5 触发错误 is_public 数据库中不存在字段。

create_from_breadcrumbs Oscar 加载具有最新状态的模型,该模型在模型中包含 is_public 但在数据库中不包含。

在迁移 #5 中,我正在加载这样的模型 类别 = apps.get_model("目录", "类别")

您不能在这样的迁移中使用 create_from_breadcrumbs。其原因在 Django 的 documentation on migrations 中有所解释 - 外部代码中使用的模型版本可能与此迁移预期的版本不同 - 这就是它失败的原因。

如果您想在迁移过程中创建模型对象,您需要在迁移中使用模型的历史版本。这意味着定义您自己的 create_from_breadcrumbs 版本,并按照 Django 文档的建议使用模型的历史版本:

def create_from_breadcrumbs_for_migration(apps, schema_editor):
    Category = apps.get_model('catalogue', 'Category')
    # Perform logic to create categories here.


class Migration(migrations.Migration):

    dependencies = [
        ('catalogue', '0004_xxxx'),
    ]

    operations = [
        migrations.RunPython(create_from_breadcrumbs_for_migration),
    ]
    

就是说,我认为迁移首先并不适用于此类数据。在我看来,您最好为此编写一个单独的管理命令,在应用迁移后 运行。