gpt4 book ai didi

django 在向后迁移/loaddata 后从夹具加载数据使用的是模型架构而不是数据库架构

转载 作者:行者123 更新时间:2023-12-04 01:57:46 24 4
gpt4 key购买 nike

我最近在导入比当前模型架构更旧的数据时遇到问题。我使用并导致错误的流程:

  • dumpdata 与 python manage.py dumpdata -> 0002
  • 对模型进行一些修改
  • 使用 python manage.py schemamigration app_name --auto -> 0003
  • 生成迁移
  • 运行迁移
  • 玩数据库
  • 迁移到 0002
  • loaddata 生成 SQL,其中我有当前(迁移 0003)字段,并导致 loaddata 进程失败(添加了 mpoly 字段)

  •   File "/usr/local/lib/python2.6/dist-packages/django/db/backends/postgresql_psycopg2/base.py",

    line 44, in execute return self.cursor.execute(query, args) DatabaseError: column "mpoly" of relation "localization_province" does not exist LINE 1: ...e" ("id", "name", "slug", "mpoly") V...


  • 评论在 0003 之前完成的 models.py 中的更改,使一切正常

  • 如果我想加载数据,有什么方法可以避免在向后迁移后使用模型吗?

    也许我错过了一些非常明显的东西......

    PS:我使用 South 7.3、Django 1.2.3 和 PostgreSQL 8.4 作为数据库后端。

    最佳答案

    Alex Vidal当它在我们的工作中咬我们时,提出了一个很好的快速解决方案。它需要 Gary Bernhardt 的 Dingus图书馆。一旦我们有时间,我们将排除 Dingus 依赖项并向 South 提交拉取请求,但如果您现在陷入困境,这可能会让您摆脱困境:

    from dingus import patch


    def loaddata(orm, fixture_name):
    _get_model = lambda model_identifier: orm[model_identifier]

    with patch('django.core.serializers.python._get_model', _get_model):
    from django.core.management import call_command
    call_command("loaddata", fixture_name)

    用法:
    from apps.common.utils import loaddata


    class Migration(DataMigration):
    def forwards(self, orm):
    loaddata(orm, "initial_fjords.json")

    到目前为止,我们仅在 Django 1.3 中进行了测试。 编辑 : 我查了 Django 的 _get_model历史,这应该适用于 Django 0.95 及更高版本。

    关于django 在向后迁移/loaddata 后从夹具加载数据使用的是模型架构而不是数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472925/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com