我已经使用South(0.7)和Django(1.1.2)积累了不少迁移,这些迁移在我的单元测试中开始消耗大量时间.我想重新设置基线,并开始一组新的migrations.我查看了South documentation个,做了通常的Google/Stackoverflow搜索(例如"django south(重置或删除或删除)迁移历史"),但没有发现任何明显的问题.

我已经考虑过的一种方法将涉及通过手动地"移除"南方或"清除"历史来"重新开始"(例如,清除数据库表,从迁移控制器移除迁移文件)并且仅仅重新运行,

./manage.py架构迁移Southtut--初始

因此,如果有人以前这样做过,并有一些提示/建议,我们将不胜感激.

推荐答案

EDIT - I'm putting a comment below at the top of this as it's important to read it before the > accepted answer that follows @andybak

@Dominique:你关于manage.py重置南方的建议是危险的 如果有任何第三方应用程序使用,则可能会销毁数据库 如下面的@thnee所指出的,在项目的南部.因为你的 答案有这么多好评,如果你能编辑一下,我将不胜感激 并至少添加一条有关此问题的警告,或者(更好的)更改它 反映@hobs方法(这同样方便,但不是 影响其他应用程序)-谢谢!-chrisv 3月26:13于9:09

接受的答案如下:

首先,an answer by the South author:

只要您注意在所有部署上同时执行此操作,这应该不会有任何问题.就我个人而言,我会这么做:

    rm -r appname/migrations/ 
    ./manage.py reset south 
    ./manage.py convert_to_south appname 

(请注意,"reset south"部分会清除所有应用程序的迁移记录,因此请确保为所有应用程序运行其他两行,或者有 Select 地删除).

最后的convert_to_south调用进行新的迁移并假应用它(因为您的数据库已经有相应的表).在此过程中不需要删除所有的APP表.

以下是当我需要消除所有这些不需要的开发迁移时,我在开发+生产服务器上执行的操作:

  1. 确保两端都有相同的数据库架构
  2. 删除两侧的每个迁移文件夹
  3. 快跑/管理py reset south(正如帖子所说)两侧=清除南表*
  4. 快跑/管理两侧py convert_to_south(假装0001迁移)
  5. 然后,我可以重新开始进行迁移,并将迁移文件夹推送到我的服务器上

*除非您只想清除其中一个应用程序,如果是这样,您将需要编辑您的SOUTURE_HISTORY表,并仅删除有关您的应用程序的条目.

Django相关问答推荐

Django、htmx删除记录并更新

查询在对象中使用django查询与一个包含句子

如何根据递归ManyToManyField值创建Django查询集?

POST_SAVE接缝有错误

Django Prefetch上的多重过滤

当从 fastapi 发送请求时,Django 无法对 Postgres 执行查询

如何在两个字段上查找 django 模型的副本?

使用 Crispy Forms 时 Django 返回 'TemplateDoesNotExist'

在 Django Rest Framework 视图中,request.user 是在请求​​到达视图之前进行数据库调用还是数据库调用发生?

如何将 ManyToManyField 与另一个 ManyToManyField 进行比较

Django:在模板中显示当前语言环境

删除所有实例后,Django 模型实例主键不会重置为 1

为什么 django 1.7 会为字段 Select 的变化创建迁移?

如何在 django 中处理这种竞争条件?

Django ModelForm 没有指定模型类

Apache + mod_wsgi 与 nginx + gunicorn

Django - 无法为具有动态 upload_to 值的 ImageField 创建迁移

Python - 覆盖 __init__ 的最干净方法,其中在 super() 调用之后必须使用可选的 kwarg?

更改 Django ModelChoiceField 以显示用户的全名而不是用户名

Django 在视图之间传递数据