django - 将多个模型从一个 django 应用程序移动到另一个

标签 django django-models

我正在使用 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/

相关文章:

django - 使用 django Rest 框架登录

django-models - 覆盖Django用户模型__unicode__

python - 如果 POST 是嵌套数组,如何使用 request.POST 更新 Django 模型的实例?

python - Django 日期时间字段验证错误 : value has an invalid format

python - Django CreateView 没有保存对象

python - 在 Django 中,可以将 Model.objects 设置为模型定义之外的另一个管理器吗?

python - Django Rest Framework - 发布到包含外键值的可写嵌套字段

python - 在 django 管理面板中执行 python 命令

django - 在 Django 中按内容对象的值排序

python - 使用缓存装饰器在 Python 中运行单元测试