好的,所以这似乎是一个非常愚蠢的问题,而且我确定我在某处遗漏了某些东西.
你如何在Django上使用South进行向后迁移?
所以我已经调整了我的模型,创建了一个迁移schemamigration,运行迁移migrate,现在我意识到这不是我想要的,我想要它回到以前的方式.
如果没有手动编辑数据库表并删除迁移文件,我应该如何进行迁移?我发现使用South通过谷歌进行向后迁移的参考,但还没有找到一个可靠的代码示例.
有人可以帮忙吗?
我想更改模型中特定字段的名称:
class Foo(models.Model):
name = models.CharField()
rel = models.ForeignKey(Bar)
Run Code Online (Sandbox Code Playgroud)
应改为:
class Foo(models.Model):
full_name = models.CharField()
odd_relation = models.ForeignKey(Bar)
Run Code Online (Sandbox Code Playgroud)
使用南方最简单的方法是什么?
我正试图开始南方.我有一个现有的数据库,我添加了South(syncdb,schemamigration --initial).
然后,我更新models.py了添加字段并运行./manage.py schemamigration myapp --auto.它似乎找到了该领域并说我可以应用它./manage.py migrate myapp.但是,这样做会给出错误:
django.db.utils.DatabaseError: table "myapp_tablename" already exists
Run Code Online (Sandbox Code Playgroud)
tablename是第一个列出的表models.py.
我正在运行Django 1.2,South 0.7
我使用South(0.7)和Django(1.1.2)积累了大量的迁移,这些迁移在我的单元测试中开始消耗相当多的时间.我想重置基线并开始一系列新的迁移.我查看了南方文档,完成了通常的Google/Stackoverflow搜索(例如"django south(重置或删除或删除)迁移历史记录")并且没有找到任何明显的内容.
我已经考虑过的一种方法是通过"删除"南方或"清除"历史记录(例如清除数据库表,从迁移控制器中删除迁移文件)来"重新开始",然后重新运行,
./manage.py schemamigration southtut --initial
所以,如果有人之前已经这样做并有一些提示/建议,他们将不胜感激.
我一直在寻找南方网站,谷歌和SO的答案,但找不到一个简单的方法来做到这一点.
我想用South重命名一个Django模型.说你有以下内容:
class Foo(models.Model):
name = models.CharField()
class FooTwo(models.Model):
name = models.CharField()
foo = models.ForeignKey(Foo)
Run Code Online (Sandbox Code Playgroud)
并且你想将Foo转换为Bar,即
class Bar(models.Model):
name = models.CharField()
class FooTwo(models.Model):
name = models.CharField()
foo = models.ForeignKey(Bar)
Run Code Online (Sandbox Code Playgroud)
为了简单起见,我只是尝试将名称从更改Foo为Bar,但暂时忽略该foo成员FooTwo.
使用南方最简单的方法是什么?
db.rename_table('city_citystate', 'geo_citystate'),但在这种情况下我不确定如何修复外键.我有一个django应用程序,里面有四个型号.我现在意识到其中一个模型应该在一个单独的应用程序中.我确实安装了南部进行迁移,但我不认为这是它可以自动处理的东西.如何将其中一个模型从旧应用程序迁移到新应用程序?
此外,请记住,我将需要这是一个可重复的过程,以便我可以迁移生产系统等.
首先,我创建了我的数据库.
create database mydb;
Run Code Online (Sandbox Code Playgroud)
我在安装的应用程序中添加"南".然后,我转到本教程:http: //south.aeracode.org/docs/tutorial/part1.html
教程告诉我这样做:
$ py manage.py schemamigration wall --initial
>>> Created 0001_initial.py. You can now apply this migration with: ./manage.py migrate wall
Run Code Online (Sandbox Code Playgroud)
好的,现在我迁移了.
$ py manage.py migrate wall
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误......
django.db.utils.DatabaseError: (1146, "Table 'fable.south_migrationhistory' doesn't exist")
Run Code Online (Sandbox Code Playgroud)
所以我使用谷歌(这永远不会奏效,因此问#2我的870度的问题.),我得到这个页面:http://groups.google.com/group/south-users/browse_thread/thread/d4c83f821dd2ca1c
好的,所以我按照说明进行操作
>> Drop database mydb;
>> Create database mydb;
$ rm -rf ./wall/migrations
$ py manage.py syncdb
Run Code Online (Sandbox Code Playgroud)
但是当我运行syncdb时,Django会创建一堆表.是的,它创建了south_migrationhistory表,但它也创建了我的应用程序表.
Synced:
> django.contrib.admin
> django.contrib.auth
> django.contrib.contenttypes
> django.contrib.sessions
> django.contrib.sites
> django.contrib.messages
> south
> fable.notification
> …Run Code Online (Sandbox Code Playgroud) 我在我的Django模型中使用自定义权限,如下所示:
class T21Turma(models.Model):
class Meta:
permissions = (("can_view_boletim", "Can view boletim"),
("can_view_mensalidades", "Can view mensalidades"),)
Run Code Online (Sandbox Code Playgroud)
问题是,当我向列表添加权限auth_permission时,当我运行syncdb时,它不会被添加到表中.我究竟做错了什么.如果它有任何区别我在南方使用数据库迁移.
我正在尝试应用迁移,但我收到错误:
django.db.utils.OperationalError:(1050,"表'customers_customer'已经存在")
我通过发出以下命令得到这个:
python manage.py migrate
Run Code Online (Sandbox Code Playgroud)
我的客户表已经存在,那么我该如何让迁移知道这一点,而不是出错,并对我的模型进行修改?
我在本地环境中用本地数据库运行它没有问题.当我将数据库指向生产并在migrate上面运行时,我得到了这个错误.
你可以在Django South首次迁移之前将应用程序向后迁移吗?如果没有,是否有计划添加此类功能,可能使用传递给的选项migrate?