标签: django-south

South忽略Python/Django中字段默认值的更改

南方为什么不识别Python模型中默认字段值的变化?例如,使用以南迁移的现有模型:

class MyFamily(models.Model):
    family_size = models.IntegerField(verbose_name="What is your family size?", default=2)
Run Code Online (Sandbox Code Playgroud)

现在,我想将默认值从2更改为4.但是,在模块化模块时,South报告:

python manage.py schemamigration family --auto change_default_from_two_to_four_for_size

Running migrations for family:
- Nothing to migrate.
    - Loading initial data for family.
Run Code Online (Sandbox Code Playgroud)

我可以手动更新初始迁移,并使用SQL直接更新字段,但这很痛苦.是否有一个我发现的南方命令识别默认值的变化?

谢谢!

python django django-south

12
推荐指数
1
解决办法
2546
查看次数

使用Django South将自动增量字段添加到现有模型?

我有一个Django项目,最初是作为遗留数据库的导入.因此,存在具有复合主键的模型.只要我只使用遗留数据,这就有效,但现在我想添加新数据,我创建的表单告诉我我正在尝试插入重复数据,大概是因为它只是查看其中一个字段作为首要的关键.

现在我想更改模型以使用自动增量主键,就像Django会自动添加一样.我尝试从字段中删除主键属性,并将它们放在Meta内部类中的unique_together中.当我schemamigration和South一起跑时,它想id按预期添加一个字段,但它要求一个默认值.

如何指定South应以某种方式为自动增量字段分配唯一键?(即将序列[1 ... n]分配给记录的某些任意顺序)

如果这不可能有另一种方法来完成同样的事情,最好使用Django和South?

django django-models django-south

12
推荐指数
1
解决办法
1487
查看次数

使用South,Django和Git时,处理数据库迁移的正确方法是什么?

背景 :-

我正在使用Django 1.3.我们使用South作为数据库迁移和Git SCM的模块.

问题:-

处理迁移的正确方法是什么形成的文件夹?

主要问题是我在开发机器中对数​​据库模式进行了更改,当我将其上传到生产服务器时,我必须迁移现有模式.虽然这样做,但迁移文件总是存在一些问题.

我应该只将迁移文件夹添加到gitignore吗?或者有更好的方法去做吗?

git django database-migration django-models django-south

12
推荐指数
1
解决办法
4599
查看次数

Django南部移民冲突在团队中工作

我有一个关于如何在团队中工作时使用Django-South的简短问题.

如果两个人同时在对同一文件的更改中创建迁移文件会发生什么?

例如,A和B正在使用相同的Django应用程序.他们在不同的分支中工作,并且都在迁移005.现在,A和B都修改了apple/models.py并使用startmigration创建了迁移文件.它们都处于迁移006但是具有完全不同的迁移文件006.我猜当它们合并它们的分支时,可能会有一些与South的错误.

有没有解决此冲突的解决方法?或南方足够智能自己解决它?

git django conflict django-south

12
推荐指数
1
解决办法
4277
查看次数

迁移时传递South随机唯一默认值

我正在尝试使用现有数据转发模型.该模型有一个新的字段,其约束唯一= True和null = False.当我做

./manage.py schemamigration myapp --auto
Run Code Online (Sandbox Code Playgroud)

South让我通过询问为新字段指定默认值:

Specify a one-off value to use for existing columns now
Run Code Online (Sandbox Code Playgroud)

通常我将其设置为None,但由于此字段必须是唯一的,我想知道是否可以通过以下方式传递South的唯一值:

 >>> import uuid; uuid.uuid1().hex[0:35]
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误信息

! Invalid input: invalid syntax 
Run Code Online (Sandbox Code Playgroud)

在通过命令行迁移时是否可以传递South随机唯一默认值?

谢谢.

django django-south

12
推荐指数
2
解决办法
5162
查看次数

南迁移错误 - 关系已经存在

背景:在我的项目中添加djangoratings之后,我尝试了运行

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local 
Run Code Online (Sandbox Code Playgroud)

这导致了schemamigration的未知命令错误.我试图通过将我的项目目录添加到PYTHONPATH来解决此错误(我使用的是virtualenv和virtualenvwrapper).这解决了schemamigration的未知命令错误,但是我想我在项目目录上面为PYTHONPATH指定了一个目录,当为djangoratings运行初始迁移时,它抱怨与whoosh有关(我在我的项目中使用) .我更改了PYTHONPATH目录并尝试运行

django-admin.py schemamigration djangoratings --initial 
--settings=myapp.settings.local
Run Code Online (Sandbox Code Playgroud)

再次.然后我运行了migrate命令.这是我收到错误时:

django.db.utils.DatabaseError: relation "djangoratings_vote" already exists
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方式一直迁移:

django-admin.py migrate djangoratings zero --settings=myapp.settings.local
Running migrations for djangoratings:
- Migrating backwards to zero state.
< djangoratings:0006_add_cookies
< djangoratings:0005_add_exclusions
< djangoratings:0004_rethink_recommendations
< djangoratings:0003_add_correlations
< djangoratings:0002_add_mean_and_stddev
< djangoratings:0001_initial
Run Code Online (Sandbox Code Playgroud)

然后再次运行 - 初始化,但执行migrate命令后发生了同样的错误.

我查看了数据库中的表列表,并没有看到任何djangoratings_vote.

我目前的djangoratings迁移清单如下:

0001_initial.py                   0006_add_cookies.py
0001_initial.pyc                  0006_add_cookies.pyc
0002_add_mean_and_stddev.py       0007_initial.py
0002_add_mean_and_stddev.pyc      0007_initial.pyc
0003_add_correlations.py          0008_initial.py
0003_add_correlations.pyc         0008_initial.pyc
0004_rethink_recommendations.py   0009_initial.py
0004_rethink_recommendations.pyc  0009_initial.pyc
0005_add_exclusions.py            __init__.py
0005_add_exclusions.pyc           __init__.pyc
Run Code Online (Sandbox Code Playgroud)

我如何解决关系"djangoratings_vote"已经存在的错误?最好用南?

migration django django-south

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

如何使用Django South为现有App创建新数据库并设置默认值?

我正在使用一个使用South迁移数据库的操作系统项目.我正在从头开始构建一个新的数据库,我想确保设置South以便将来轻松更新数据库.

看来这个过程应该是:

  1. 创建数据库
  2. 执行syncdb
  3. 迁移

但是,当我尝试迁移数据库时,早期迁移之一(迁移0004并且转到0009)会引发异常:

ValueError: You cannot add a null=False column without a default value.
Run Code Online (Sandbox Code Playgroud)

我不明白如何向迁移0004添加默认值,因此不会抛出此异常.

由于数据库为空,因此无需运行迁移.

但是, south_migrationhistory必须包含所有迁移的列表以及何时应用它们.

我试图破解它,只是手动将迁移0009添加到数据库,但这引发了另一个错误,因为尚未运行中间迁移.我还尝试向数据库添加一个字段,以查看我是否能够找出add_column的语法,其默认值为0.该格式与这些较旧的迁移完全不同.

以下是add_column语法的2个不同版本:

#0004 syntax:  
db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size'])
#0009 syntax:
syntax db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
Run Code Online (Sandbox Code Playgroud)

所以,我猜测在创建0004和今天之间南方代码发生了变化.

有没有办法用syncdb构建数据库,然后以某种方式更新south_migrationhistory而不运行manage.py migrate?

如果您有一个具有南迁移的现有应用程序,您将如何从头开始构建新数据库?

我无法迁移,因为整数字段没有默认设置.如何在较早的迁移中设置默认值?该领域甚至不再存在.

尝试语法:

db.add_column('experiments_dailyreport', 'test_group_size', orm['experiments.dailyreport:test_group_size'], {'default': 0})
#throws ValueError: You cannot add a null=False column without a default value.
db.add_column('experiments_dailyreport', 'test_group_size', self.gf('django.db.models.fields.IntegerField')(default=0), keep_default=False)
#throws AttributeError: Migration instance has no attribute 'gf'
Run Code Online (Sandbox Code Playgroud)

我正在使用South-0.7.2-py2.7.egg

django django-database django-south

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

如何从Pylint中排除南迁移?

我在我的Django项目中使用South进行迁移.当我在我的项目上运行Pylint时,我从迁移文件中得到了一堆错误.如何从Pylint中排除迁移文件?

我在Windows系统上,所以我不能在Pylint选项中使用文件名排除.我试图添加# pylint: disable-msg-cat=WCREFI到每个迁移文件的顶部.它似乎非常kludgy,似乎是最后的手段,但这个记录的指令不起作用,我得到错误[E] Unrecognized file option 'disable-msg-cat'.

python django pylint django-south

11
推荐指数
1
解决办法
2163
查看次数

南方数据移植与模式移民相比有什么作用?

我最近开始深入挖掘南方文档并发现它有两种不同类型的迁移:

  • schemamigration
  • 数据迁移

由于我的无知,我总是使用schemamigrations来处理所有事情.换句话说,即使我有一些真正的"数据迁移",我也只是使用South的模式迁移来转换数据(没有明显的后果).

当我阅读文档时,我没有看到这种方法的错误.有没有人知道两次迁移之间的根本区别以及我坚持使用schemamigrations可能会遗漏的内容?

django django-south

11
推荐指数
2
解决办法
1548
查看次数

在使用South迁移重新授权的类时,我对_ptr使用什么值?

我有两个类,其中一个是另一个类的后代,我想让它们成为同一基类的同类兄弟类.

之前:

from django.db import models

class A(models.Model):
    name = models.CharField(max_length=10)

class B(models.Model):
    title = models.CharField(max_length=10)
Run Code Online (Sandbox Code Playgroud)

后:

from django.db import models

class Base(models.Model):
    name = models.CharField(max_length=10)

class A(Base):
    pass

class B(Base):
    title = models.CharField(max_length=10)
Run Code Online (Sandbox Code Playgroud)

当我生成模式迁移时,这是输出,包括我对问题的回答:

+ Added model basetest.Base
? The field 'B.a_ptr' does not have a default specified, yet is NOT NULL.
? Since you are removing this field, you MUST specify a default
? value to use for existing rows. Would you like to:
?  1. Quit now, …
Run Code Online (Sandbox Code Playgroud)

django-south

11
推荐指数
2
解决办法
2492
查看次数