Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将带有的模型从一个django应用程序迁移到多个其他应用程序_Python_Django_Django Models_Django South_Data Migration - Fatal编程技术网

Python 将带有的模型从一个django应用程序迁移到多个其他应用程序

Python 将带有的模型从一个django应用程序迁移到多个其他应用程序,python,django,django-models,django-south,data-migration,Python,Django,Django Models,Django South,Data Migration,我有一个django应用程序,由17个模型组成。现在我意识到这些模型应该在3个不同的应用程序中(而不是在原来的应用程序中)。因此,现在我想将这些模型从原始应用迁移到这3个不同的应用。我该怎么做 模型之间存在外键、泛型外键和多种关系。我的数据库(MySql)中也有数据,所以我希望在迁移过程中保留这些数据 我已经安装了south for migrations,但不知道如何使用它来解决这个问题。我经历过这些,但找不到解决我问题的答案。我会感谢你的帮助 在我看来,您有两种方式完成此任务,如下所述: 根据

我有一个django应用程序,由17个模型组成。现在我意识到这些模型应该在3个不同的应用程序中(而不是在原来的应用程序中)。因此,现在我想将这些模型从原始应用迁移到这3个不同的应用。我该怎么做

模型之间存在外键、泛型外键和多种关系。我的数据库(MySql)中也有数据,所以我希望在迁移过程中保留这些数据


我已经安装了south for migrations,但不知道如何使用它来解决这个问题。我经历过这些,但找不到解决我问题的答案。我会感谢你的帮助

在我看来,您有两种方式完成此任务,如下所述:

  • 根据@kroolik的建议,移动模型并添加Meta.db_表,以根据需要引用现有的sql表
  • 执行三步迁移
  • 前者更容易,而后者可能更好,因为表的名称将如您所期望的那样

    首先,你提到你已经安装了south。第一步是为现有应用程序创建初始迁移。看一看。然后必须应用该迁移,但由于数据库中已有表,除非包含
    --fake
    标志,否则迁移将失败

    之后,您需要创建您提到的三个应用程序及其模型。还要为它们创建并应用(这次没有假标志)初始迁移

    下一步是编写数据迁移。尽管可以使用创建骨架,但必须手动编写。您必须“手工”编写迁移

    现在您几乎完成了,剩下的唯一一件事就是删除原始表。您可以删除这些模型,然后创建一个“自动”模式迁移


    不要忘记使用
    migrate
    命令应用迁移。另外,正如@Bibhas提到的,数据库的副本和/或转储是一个不错的主意。

    您可以将它们放在不同的应用程序中,然后使用south进行迁移,还可以编写自定义迁移以保留数据。尝试一下。检查一下。为了安全起见,创建一个数据库副本并处理它。当我创建三个应用程序及其模型时,我保持了原始应用程序的模型不变。将初始迁移应用于三个应用程序之一(通知),我得到一个很长的错误:CommandError:一个或多个模型未验证:Notification.Notification:字段“Notification_from”的访问者与相关字段“User.from”冲突。将相关的\u name参数添加到“not\u from”的定义中。当我对原始应用程序的模型进行注释时,会出现这个错误$python manage.py schemamigration Notification--initial ImportError:cannot import name Notification我猜您有一个循环导入问题。当您从模块B导入模块A和从模块A导入模块B时会发生这种情况。您可以删除导入并在ForeignKey构造函数中使用字符串,如中所述,这不是循环导入问题。问题在于相关的应用程序名称(模型中未提供相关的应用程序名称参数)。我应该为原始应用程序还是三个新应用程序编写数据迁移?数据迁移将用于将一个应用程序转换为三个应用程序。在我看来,最好把它放在原来的应用程序。