如何将模型从一个 Django 应用程序迁移到新的应用程序中?

2023-11-22

我有一个 Django 应用程序,里面有四个模型。我现在意识到这些模型之一应该位于单独的应用程序中。我确实安装了 South 用于迁移,但我不认为这是它可以自动处理的事情。如何将旧应用程序中的模型之一迁移到新应用程序中?

另外,请记住,我需要这是一个可重复的过程,以便我可以迁移生产系统等。


如何使用向南迁移。

假设我们有两个应用程序:通用和特定:

myproject/
|-- common
|   |-- migrations
|   |   |-- 0001_initial.py
|   |   `-- 0002_create_cat.py
|   `-- models.py
`-- specific
    |-- migrations
    |   |-- 0001_initial.py
    |   `-- 0002_create_dog.py
    `-- models.py

现在我们想要将模型 common.models.cat 移动到特定应用程序(准确地说是特定的.models.cat)。 首先在源代码中进行更改,然后运行:

$ python manage.py schemamigration specific create_cat --auto
 + Added model 'specific.cat'
$ python manage.py schemamigration common drop_cat --auto
 - Deleted model 'common.cat'

myproject/
|-- common
|   |-- migrations
|   |   |-- 0001_initial.py
|   |   |-- 0002_create_cat.py
|   |   `-- 0003_drop_cat.py
|   `-- models.py
`-- specific
    |-- migrations
    |   |-- 0001_initial.py
    |   |-- 0002_create_dog.py
    |   `-- 0003_create_cat.py
    `-- models.py

现在我们需要编辑两个迁移文件:

#0003_create_cat: replace existing forward and backward code
#to use just one sentence:

def forwards(self, orm):
    db.rename_table('common_cat', 'specific_cat') 

    if not db.dry_run:
        # For permissions to work properly after migrating
        orm['contenttypes.contenttype'].objects.filter(
            app_label='common',
            model='cat',
        ).update(app_label='specific')

def backwards(self, orm):
    db.rename_table('specific_cat', 'common_cat')

    if not db.dry_run:
        # For permissions to work properly after migrating
        orm['contenttypes.contenttype'].objects.filter(
            app_label='specific',
            model='cat',
        ).update(app_label='common')

#0003_drop_cat:replace existing forward and backward code
#to use just one sentence; add dependency:

depends_on = (
    ('specific', '0003_create_cat'),
)
def forwards(self, orm):
    pass
def backwards(self, orm):
    pass

现在,两个应用程序迁移都意识到了这一变化,生活的糟糕程度也减轻了一些:-) 设置迁移之间的这种关系是成功的关键。 现在如果你这样做:

python manage.py migrate common
 > specific: 0003_create_cat
 > common: 0003_drop_cat

将进行迁移,并且

python manage.py migrate specific 0002_create_dog
 < common: 0003_drop_cat
 < specific: 0003_create_cat

会将东西向下迁移。

请注意,为了升级架构,我使用了通用应用程序,为了降级,我使用了特定应用程序。那是因为这里的依赖关系是如何工作的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将模型从一个 Django 应用程序迁移到新的应用程序中? 的相关文章

随机推荐

  • 如果 Maven 中的传递依赖项来自我父级的其他子模块,我是否应该依赖它们?

    假设我们正在研究mortgage子模块 我们直接使用Google Guava模块代码中的类 但依赖项guava在同一父模块下的其他子模块中定义 我们只能通过对 investment 模块的传递依赖来访问 Guava 类 banking sy
  • UIScrollView 上的边界会随着内容插入而自动更改

    我使用 UIScrollView 作为我的分页滚动视图 pagesScrollView 在其中 我放置了专门用于缩放的单独的 UIScrollView 在每个视图中 我都有一个视图 该视图是应该可缩放的页面项目 所有这些都位于带有半透明导航
  • System.DirectoryServices 很慢?

    当用户登录网站时 我使用下面的代码在活动目录中查找信息 针对本地域运行速度非常快 但通过 VPN 运行到远程受信任域时 速度非常慢 大约需要 7 或 8 秒 从同一个机器到远程域运行 dsa msc 几乎与在本地运行它一样快 我正在使用属性
  • JavaScript 有类吗?

    上周我和一个朋友发生了争执 他说 JavaScript 中不存在类这样的东西 我说有你可以说的var object new Object 他说 因为没有文字class用过的 这不是一个班级 谁是对的 编辑 2017 年 7 月 ECMASc
  • 向 TList 和 TStringList 添加稳定排序的简单方法

    我将 TList TObjectList 和 TStringList 带有关联对象 用于多种任务 或者按原样使用 或者作为更复杂结构的基础 虽然排序功能通常足够好 但有时我需要做一个stable排序 两个列表都使用快速排序 为 TList
  • 添加 cache.manifest 后,AngularJS/PouchDB 应用程序停止同步到 CouchDB

    我有一个使用 AngularJS 编写的单页 Web 应用程序 它使用 PouchDB 复制到 CouchDB 服务器并且工作正常 当我尝试通过添加cache manifest 将网页转换为可离线使用时 问题就出现了 突然间 所有复制任务都
  • 对 CouchDB 视图中的日期进行排序

    我有一个嵌套的 JSON 对象作为键status below 2011 01 19 09 41 00 AM Prototyping status application 2011 01 20 09 41 00 AM Playing with
  • 如何按字母数字对数字进行排序

    Input SHC 111U SHB 22x SHA 5555G 所需输出 SHB 22X SHC 111U SHA 5555G 我只需要排序Vehicle no在停车场内没有前缀和后缀字母 出色的 优化良好的开源解决方案 位于http d
  • 在 Visual Studio Code 中以编程方式检测亮/暗主题

    我正在开发 Visual Studio Code扩大可以预览mermaid图表 该扩展使用默认样式表 如果使用浅色主题 该样式表可以正常工作 但是 如果用户已将 Visual Studio Code 切换为使用深色主题 则样式表中的一些规则
  • 使用 JavaScript 访问 iPhone 指南针

    知道是否可以使用 JavaScript 在 Safari 中访问 iPhone 指南针 我懂了如何访问 GPS 但我认不出指南针 On iOS 您可以检索compass像这样的值 window addEventListener device
  • 遍历目录树的方式有哪几种?

    如何用您最喜欢的语言遍历目录树 要在不同操作系统中遍历目录树 您需要了解什么 在不同的文件系统上 您最喜欢的帮助遍历目录树的库 模块是什么 In Python 如果您正在寻找快速 干净且便携的解决方案 请尝试 import os base
  • 将created_at和updated_at字段添加到mongoose模式

    有没有办法添加created at和updated at字段到猫鼬模式 而不必每次都将它们传递给新的MyModel 叫做 The created at字段将是一个日期 并且仅在创建文档时添加 这updated at字段将在任何时候更新为新日
  • 爪哇。比较字符串时忽略重音符号

    问题很简单 JAVA中有没有函数可以比较两个字符串并返回true 忽略重音字符 ie String x Joao String y Jo o 返回相等的 Thanks 我认为你应该使用Collator班级 它允许您设置强度和区域设置 并且它
  • 绝对/相对定位布局溢出

    在相当长的一段时间里 我一直在摆弄一个特定的布局问题 但我显然采用了错误的方式 以下是该方法的基本组成部分 div class stretched div class header SOME HEADER div div class som
  • 身份验证失败:Devise + OmniAuth + Twitter

    我正进入 状态 twitter Authentication failure invalid credentials OAuth Unauthorized 401 Unauthorized成功登录 Twitter 并且页面重定向到登录页面后
  • Hibernate Oracle 表空间注释

    我正在注释我的 DAO 并使用 hibernate3 hbm2ddl 生成 ddls 有没有办法注释表空间 不 没有办法开箱即用 我过去使用以下相当复杂的方法解决了这个问题 创建您自己的注释 TableSpec具有表空间和其他必要的属性 E
  • 复选框的 CSS 边框

    我正在应用 jQuery 复选框的样式 reg checkbox css border thin solid red 边框在 IE 中工作正常 但在 mozilla 中不行 如何使其兼容浏览器 使用大纲 http jsfiddle net
  • Visual Studio 组件缓存已过期

    几乎每次我尝试运行 EF 迁移的 update database 命令时 我都会在 Visual Studio 2015 中收到以下错误 使用 1 个参数调用 GetService 时发生异常 异常 使用 2 个参数调用 Invoke Vi
  • iOS Swift Flood 填充算法

    我为接触点的 桶填充 洪水填充 创建了这个扩展 extension UIImageView func bucketFill startPoint CGPoint newColor UIColor var newRed newGreen ne
  • 如何将模型从一个 Django 应用程序迁移到新的应用程序中?

    我有一个 Django 应用程序 里面有四个模型 我现在意识到这些模型之一应该位于单独的应用程序中 我确实安装了 South 用于迁移 但我不认为这是它可以自动处理的事情 如何将旧应用程序中的模型之一迁移到新应用程序中 另外 请记住 我需要