我为我的Django站点使用South进行模式和数据迁移.我很高兴使用它.有一天,我将models.py文件转换为models/__init__py并添加了一些其他模型models/something.py.当我跑步的时候python manage.py schemamigration app --auto,Nothing seems to have changed.尽管有新的课程,但我收到了消息something.py.如果我将它们复制到__init__py文件中,South已经识别出新模型.我试图从something顶部导入所有内容__init__py,但没有变化.
我有一个使用该choices 属性的Django模型.
COLOR_CHOICES = (
('R', 'Red'),
('B', 'Blue'),
)
class Toy(models.Model):
color = models.CharField(max_length=1, choices=COLOR_CHOICES)
Run Code Online (Sandbox Code Playgroud)
我的代码正在生产中,现在我想添加其他选择.
COLOR_CHOICES = (
('R', 'Red'),
('B', 'Blue'),
('G', 'Green'),
)
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?Django是否使用数据库约束来强制执行选择?我是否需要进行数据库迁移(我正在使用South)?或者Django只是强制执行Python代码中的选择限制,我所要做的就是更改代码并重新启动?
谢谢!
我正在使用South来生成和应用迁移,而不是自己管理.不幸的是,南方拒绝实际做任何事情.成绩单如下:
[graffias:~/testing.tustincommercial.com/oneclickcos]$ python ./manage.py schemamigration mainapp --auto
You cannot use --auto on an app with no migrations. Try --initial.
[graffias:~/testing.tustincommercial.com/oneclickcos]$ python ./manage.py schemamigration mainapp --initial
+ Added model mainapp.CompanyUK
+ Added model mainapp.CompanyName
+ Added model mainapp.Individual
+ Added model mainapp.Director
+ Added model mainapp.DirectorsIndividual
+ Added model mainapp.DirectorsCorporate
+ Added model mainapp.ShareCapitalClass
+ Added model mainapp.Member
+ Added model mainapp.MembersIndividual
+ Added model mainapp.MemberGeneric
+ Added model mainapp.CompanyManager
+ Added model mainapp.PendingRegistration
+ Added model mainapp.PendingAuthorisation
Created …Run Code Online (Sandbox Code Playgroud) 我更改了Django模型,并使用Django schemamigration更新数据库.但是,当我这样做时python manager.py migrate app,它会抛出此错误消息:
_mysql_exceptions.OperationalError: (1050, "Table 'forum_user' already exists")
Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,目前有35个南迁移.在设置新部署时我们需要花费一些时间(我们经常创建新的部署),并且应用程序在不断发展 - 添加更多迁移.此外,迁移包括一些可能复杂的数据迁移和一些破坏SQLite3的自定义迁移(现在不是一个很大的问题,因为一切都在Postgres上,但很高兴能够建立一个快速的测试环境),通常只是更多可能出错的事情.
我们所有的部署和开发人员都是最新的,我想清除所有应用程序的迁移并创建一个捕获应用程序当前状态的初始迁移(0001),然后继续进行新的迁移那里.几年前我用不同的应用程序做了这个,并且它运行得很好,但我已经忘记了这个过程是什么,并且忘记了解释如何操作的博客文章.任何人都可以为我打破这个过程吗?
这似乎已经过时了,因为reset使用我正在使用的南方版本似乎找不到命令,这是我认为的最新版本.
无论如何,说你正在制作中,事情变得非常混乱.在清理迁移历史记录时,使用Django应用程序重新开始新的最佳方式是什么?
我在Django 1.5项目中有一个应用程序(我们称之为MyApp).MyApp定义了一个自定义用户模型(MyUser).该项目使用另一个引用MyUser的应用程序(AnotherApp).MyApp引用AnotherApp中的字段.
我的开发笔记本电脑上的一切都运行良好.我正在尝试在服务器上部署我的项目,当我进入迁移步骤时,MyApp因为依赖于AnotherApp而失败,而AnotherApp在依赖于MyApp时失败(我尝试独立迁移应用程序).两者都失败了他们各自的第一次迁移(0001)
Running migrations for myapp:
- Migrating forwards to 0017_auto__blah_blah.
> myapp:0001_initial
FATAL ERROR - The following SQL query failed: ALTER TABLE "myapp_mymodel_othermodel" ADD CONSTRAINT "othermodel_id_refs_id_ae052c6d" FOREIGN KEY ("othermodel_id") REFERENCES "anotherapp_othermodel" ("id") DEFERRABLE INITIALLY DEFERRED;
The error was: relation "anotherapp_othermodel" does not exist
Error in migration: myapp:0001_initial
DatabaseError: relation "anotherapp_othermodel" does not exist
Running migrations for anotherapp:
- Migrating forwards to 0008_blah_blah.
> anotherapp:0001_initial
FATAL ERROR - The following SQL query failed: ALTER TABLE "anotherapp_othermodel" ADD CONSTRAINT "creator_id_refs_id_cff6fecf" …Run Code Online (Sandbox Code Playgroud) 我正在使用PyQt应用程序,该应用程序使用Django将其内容提供给桌面用户.
在最新的更新中,我们有Django存储在数据库中的陈旧内容类型,并且在应用程序启动时,South的migrate或syncdb提供删除它们.是否可以通过调用migrate/syncdb来自动删除这些内容?
由于显而易见的原因,此提示无法向最终用户公开,所以我真的希望有一些方法可以让我们自动开车:)
我已经看到,在南迁移你可以打电话,--noinput但不会删除它们,如果我们可以做到这一点会很好,因为我们知道这将是安全的.
或者:Django 1.7用户还可以使用South吗?
我是一个可重用的应用程序的维护者.我们的政策是始终支持最新的两个版本的Django.我们有一系列广泛的南迁移,我们希望支持新的Django 1.7迁移系统.
我很困惑的是我如何允许开发人员在Django 1.6(和South)和Django 1.7(新的迁移)中使用我的应用程序.
Django文档建议只删除所有已存在的南迁移.但这不是一个选择,因为我需要为我的Django 1.6用户保留它们.
最接近我可以提出的升级路径,直到我在我的应用程序中放弃对Django <1.7的支持时才使用新的迁移系统(所以当Django 1.8出来时).但是与migrate命令的命名冲突呢?南方和新系统都python manage.py migrate用于运行迁移.那么Django 1.7用户再也不能使用South了?
我想在postgres数据库中添加一个多列索引.我有一个非阻塞SQL命令来执行此操作,如下所示:
CREATE INDEX CONCURRENTLY shop_product_fields_index ON shop_product (id, ...);
Run Code Online (Sandbox Code Playgroud)
当我将db_index添加到我的模型并运行迁移时,它是否同时运行还是会阻止写入?django可以并发迁移吗?