Django没有应用数据库迁移

时间:2014-06-20 17:49:37

标签: python django django-south

我对我的model.py文件进行了一些更改...我添加了另一个字段(fds_name):

from django.db import models

class funds(models.Model):
    fds_symbol  = models.CharField(max_length=5)
    fds_name  = models.CharField(max_length=128)

我运行了南架构迁移命令,它检测到了更改并进行了迁移:

/var/www/finance/finance-env/bin/python3 manage.py schemamigration corefinance --auto
tail corefinance/migrations/0002_auto__add_funds.py
        models = {
            'corefinance.funds': {
                'Meta': {'object_name': 'funds'},
                'fds_name': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
                'fds_symbol': ('django.db.models.fields.CharField', [], {'max_length': '5'}),
                'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
            }
        }

        complete_apps = ['corefinance']

但是,当我运行迁移时,它表示没有任何迁移,我可以看到数据库仍然缺少新字段。

/var/www/finance/finance-env/bin/python3 manage.py migrate corefinance
Running migrations for corefinance:
- Nothing to migrate.
 - Loading initial data for corefinance.
Installed 0 object(s) from 0 fixture(s)

2 个答案:

答案 0 :(得分:1)

这可能是因为在--initial迁移和下一个模式迁移之间,您必须将实际迁移持久保存到发出命令python manage.py migrate corefinance的数据库。

完成第一次迁移之后,您可以添加另一个字段,执行和schemamigration --auto并通过执行python manage.py migrate corefinance再次将其提交到数据库

答案 1 :(得分:1)

这个解决方案比dhana的答案更有吸引力,但它确实有效。您可以通过数据库管理界面手动更改数据库架构,然后运行a fake migration。通过这样做,Django将认为已经应用了模式迁移,并且已经进行了所有必要的数据库更改。