我正在使用 django v2.0.2 构建一个项目,该项目由 3 个具有 24 个模型的应用程序组成。其中一款应用有 14 个模型。在一个应用程序中拥有如此多的模型变得越来越复杂,我想创建一个新应用程序并将少数模型移至此应用程序。
我找到了 an answer解释如何使用南来做到这一点。我一直在使用 django 核心迁移,由于不推荐使用南,此时我不想切换到南。
我要移动的模型非常复杂 - 它们有 ForeignKey
字段,ManyToMany
字段等。我需要一个工作流来展示如何使用 django 核心迁移来移动这些模型。
最佳答案
这应该不难做到。您遇到的主要问题是 Django automatically derives数据库表的名称来自您的模型类和包含它的应用程序的名称。
这意味着除非您明确设置 db_table 模型元中的属性,与您的模型对应的所有表的名称都是根据应用程序/模型名称组合自动生成的。
因此,如果您有 发帖 模型在 博客 app,自动生成的表名 发帖 型号是 blog_post .如果您决定搬家 发帖 模型到 文章 应用程序,Django 将查找名为 的表article_post 并且无法将您的模型与正确的表相关联。
要解决此问题,您需要显式设置 db_table 每个模型的属性。 db_table name 值必须对应于当前的应用程序/模型组合。所以在 的情况下发帖 上面提到的模型,你会设置 db_table 至 blog_post .一旦你设置了 db_table 属性,您可以将模型移动到任何其他应用程序。
class Post(models.Model):
title = models.CharField(max_length=120)
class Meta:
db_table = 'blog_post'
移动所有模型后,登录 django admin 以验证您的数据是否仍可通过新移动的模型访问。
当您运行时 makemigrations 第一次移动模型后,
Django 迁移将创建迁移文件,删除旧应用程序中移动的模型,并在新应用程序中重新创建它们。不要应用这些迁移,而是运行 迁移--假这会将迁移记录为已执行,而无需对数据库进行任何更改。之后,您的迁移文件和数据库结构将同步。
关于django - 将多个模型从一个 django 应用程序移动到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48860227/