标签: django-south

使用south来重构具有继承的Django模型

我想知道Django 南部是否可以进行以下迁移并仍保留数据.

之前:

我目前有两个应用程序,一个叫做tv,一个叫做电影,每个都有一个VideoFile模型(这里简化):

电视/ models.py:

class VideoFile(models.Model):
    show = models.ForeignKey(Show, blank=True, null=True)
    name = models.CharField(max_length=1024, blank=True)
    size = models.IntegerField(blank=True, null=True)
    ctime = models.DateTimeField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

电影/ models.py:

class VideoFile(models.Model):
    movie = models.ForeignKey(Movie, blank=True, null=True)
    name = models.CharField(max_length=1024, blank=True)
    size = models.IntegerField(blank=True, null=True)
    ctime = models.DateTimeField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

后:

因为两个videofile对象是如此相似,所以我想摆脱重复并在一个名为media的单独应用程序中创建一个新模型,该应用程序包含一个通用的VideoFile类并使用继承来扩展它:

媒体/ models.py:

class VideoFile(models.Model):
    name = models.CharField(max_length=1024, blank=True)
    size = models.IntegerField(blank=True, null=True)
    ctime = models.DateTimeField(blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

电视/ models.py:

class VideoFile(media.models.VideoFile):
    show = models.ForeignKey(Show, blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

电影/ models.py:

class VideoFile(media.models.VideoFile):
    movie = …
Run Code Online (Sandbox Code Playgroud)

python migration django django-south

32
推荐指数
2
解决办法
8807
查看次数

用Django和South重命名应用程序

我正在将应用程序重命名为更合适的名称.在这样做时,我想确保South正确迁移数据库(重命名数据库表并更改django_content_type或south_migrationhistory中的引用).我知道如何将模型迁移到其他应用程序,但是当我尝试重命名应用程序本身时,South无法正确识别迁移历史记录.

不受欢迎的解决方案:在重命名时old_app,new_app我可以old_app/migrations完整保留并添加新的迁移到此目录以将数据库迁移到引用new_app.

如果可能的话我宁愿old_app完全删除目录.我还没有想过更好地解决这个问题.

使用Django South重命名应用程序而不丢失数据的最佳方法是什么?

migration django rename django-south

32
推荐指数
3
解决办法
1万
查看次数

如何在Django 1.7中重置迁移

(我知道有一个与此相同的标题,但问题不同).

我设法使我的开发机器迁移和生产迁移不同步.

我有一个使用South的Django应用程序.我有自己的工作流程,工作正常(这可能不是正确的做事方式,但我没有遇到任何问题).

基本上我有一个脚本将生产数据库转储复制到我的开发机器.它还复制了迁移文件.这样两者是同步的,我可以照常运行南方命令.

现在我已升级到1.7,并开始使用迁移.当我使用以前的工作流程(复制数据库转储和生产中的迁移文件)时,它不会检测我的开发计算机上的更改.

我已经阅读了迁移文档,我发现使用它的正确方法是

  1. 在我的开发机器上运行"make migrations"和"migrate".
  2. 在我的devlopemnt机器上运行"migrate"以实际更改数据库
  3. 复制更改,包括迁移文件.
  4. 在生产机器上运行"迁移".(没有"makemigrations"步骤)

无论如何.现在一切都搞得一团糟.我想"重置"我的迁移并从头开始,从现在开始做正确的事情.

我需要做什么?

  1. 删除迁移表的内容(在两台机器上)?
  2. 删除迁移文件夹的内容?(包括init .py文件).
  3. 根据新文档开始迁移.

我错过了什么吗?是否有理由为什么从生产(数据库和迁移文件)复制所有内容后,我的开发机器上都没有检测到任何更改

migration django django-south django-migrations

30
推荐指数
5
解决办法
4万
查看次数

测试使用South迁移的Django应用程序

我正在尝试为使用South迁移的Django应用程序创建一些功能测试.
最后,我还将创建斜纹测试.

当我尝试运行现有测试时,由于South迁移的问题,未成功创建测试数据库.(58次迁移中的第7次失败)

似乎为了测试的目的,最好从Django模型构建测试数据库,就像syncdb一样,而不是来自South.

如何设置Django测试套件以从当前模型构建测试数据库而不是尝试使用South?

django django-testing django-syncdb django-south

29
推荐指数
1
解决办法
5022
查看次数

Django - 南 - 有没有办法查看它运行的SQL?

这就是我想要做的.

使用开发数据库在开发服务器上开发Django项目.更改模型时,根据需要运行南迁移.

从每次迁移中保存SQL,并在我准备部署时将这些应用到生产服务器.

南方有可能这样吗?(我也很好奇其他人在使用Django时如何让你的开发数据库更改生产)

python database migration django-south

28
推荐指数
2
解决办法
1万
查看次数

使用Django South和多个代码分支的工作流程

我很好奇其他Django开发人员在开发多个代码分支时如何管理他们与South的数据库迁移.让我举一个示例场景.

比如说你用主干开始开发.您从主干创建分支A. 此时,上次迁移的版本为app_10010.

然后,app_1在创建迁移文件的主干中创建迁移0011_add_name_column.同时,在分支A中,另一个开发人员app_1在分支A:中创建相同的迁移文件0011_increase_value_column_size.

分支A最终合并回主干.发生这种情况时,请说app_1分支A中的最后一个迁移版本是0020最后一个版本的主干0018,并且它们都是不同的迁移.正如您所看到的,迁移文件的状态从版本开始变得混乱0011,当分支从主干分叉时......并且它们在合并时都会发生冲突.

根据South的教程,处理这种情况的唯一方法是手动解决所有冲突.但是,如果冲突的数量很大,这并不是一个理想的解决方案.你通常如何处理这种情况,甚至首先要避免这种情况?

django branch django-south

27
推荐指数
2
解决办法
3477
查看次数

南迁移错误:django.contrib.auth的NoMigrations异常

我已经在我的项目上使用了South一段时间了,但我最近做了大量的开发并改变了开发机器,我认为在这个过程中搞砸了.该项目工作正常,但我无法应用迁移.每当我尝试应用迁移时,我都会得到以下回溯:

danpalmer:pest Dan$ python manage.py migrate frontend
Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 362, in execute_manager
    utility.execute()
  File "/Library/Python/2.6/site-packages/django/core/management/__init__.py", line 303, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Python/2.6/site-packages/django/core/management/base.py", line 222, in execute
    output = self.handle(*args, **options)
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/management/commands/migrate.py", line 102, in handle
    delete_ghosts = delete_ghosts,
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 182, in migrate_app
    applied = check_migration_histories(applied, delete_ghosts)
  File "/Library/Python/2.6/site-packages/South-0.7-py2.6.egg/south/migration/__init__.py", line 85, in check_migration_histories
    m = h.get_migration()
  File …
Run Code Online (Sandbox Code Playgroud)

database migration django django-south

25
推荐指数
4
解决办法
1万
查看次数

南+ Django 1.4数据库错误

我刚刚在一个新系统上安装了我的Django项目,并安装了Django 1.4.但是,当我尝试运行manage.py runservermanage.py syncdb从南方收到此错误时:

Validating models...

Unhandled exception in thread started by <bound method Command.inner_run of <django.contrib.staticfiles.management.commands.runserver.Command object at 0x1a67810>>
Traceback (most recent call last):
  File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 91, in inner_run
    self.validate(display_num_errors=True)
  File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate
    num_errors = get_validation_errors(s, app)
  File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/core/management/validation.py", line 30, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 158, in get_app_errors
    self._populate()
  File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 64, in _populate
    self.load_app(app_name, True)
  File "/home/saul/.virtualenvs/canada/lib/python2.7/site-packages/django/db/models/loading.py", line 88, in load_app
    models = …
Run Code Online (Sandbox Code Playgroud)

django django-south django-staticfiles django-1.4

25
推荐指数
2
解决办法
1万
查看次数

是否有南方的add_introspection_rules()的Django 1.7+替代品?

回到South迁移的时代,如果你想创建一个扩展Django字段功能的自定义模型字段,你可以告诉South使用父类的内省规则,如下所示:

from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^myapp\.stuff\.fields\.SomeNewField"])
Run Code Online (Sandbox Code Playgroud)

既然迁移已经转移到Django,那么上面的非南方是否相同?是不是还需要一个等价物,或者新的迁移内容是否足够巧妙,可以自行解决?

django django-south

25
推荐指数
1
解决办法
2268
查看次数

从Django 1.6(南方)升级到1.8不会修改用户表上的"last_login"

我已经从Django 1.6.5(南迁)升级到Django 1.8.我按照这里的说明操作:https: //docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south

因此,我删除了South,删除了以前的迁移并运行python manage.py makemigrations了一个新的迁移文件.然后我跑去python manage.py migrate --fake-initial伪造初始迁移.然后我跑了python manage.py migrate.

一切运行良好,没有错误.

我有一个继承的自定义用户模型AbstractBaseUser.在Django 1.8中,似乎last_login现在可以接受一个null值的字段发生了变化(https://docs.djangoproject.com/fr/1.8/ref/contrib/auth/#django.contrib.auth.models .User.last_login).

我遇到的问题是,迁移不会更改last_login数据库表中的字段以接受空值.结果,当我尝试保存时,我得到了一个IntegrityError说法(1048, "Column 'last_login' cannot be null").

我怎样才能解决这个问题?我是否需要手动更改数据库中的字段,还是有办法通过迁移修复它?

编辑 当我运行python manage.py migrate --fake-initial输出时:运行迁移:

  Rendering model states... DONE
  Applying contenttypes.0001_initial... FAKED
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... FAKED
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK …
Run Code Online (Sandbox Code Playgroud)

python mysql django django-south django-1.8

25
推荐指数
1
解决办法
8171
查看次数