Django south migration error with unique field in postgresql database
编辑:我理解发生这种情况的原因。这是因为存在初始的data.json文件。令人欣慰的是,南方希望在迁移后添加这些设备,但由于一个字段的独特属性而失败。
你好,
我改变了我的模型:
1 2 3 4 5 6 | class Setting(models.Model): anahtar = models.CharField(max_length=20,UNIQUE=TRUE) deger = models.CharField(max_length=40) def __unicode__(SELF): RETURN SELF.anahtar |
对此,
1 2 3 4 5 6 | class Setting(models.Model): anahtar = models.CharField(max_length=20,UNIQUE=TRUE) deger = models.CharField(max_length=100) def __unicode__(SELF): RETURN SELF.anahtar |
架构迁移命令已成功完成,但尝试迁移时出现以下错误:
完整性错误:重复的键值违反了唯一约束"blog_setting_anahtar_key"
detail:key(anahtar)=(blog_baslik)已经存在。
我想保持该字段的唯一性,但仍要迁移该字段。顺便说一下,只要数据库中的其他表保持不变,该表上的数据丢失是可以接受的。
实际上,同步数据库的默认行为是每次运行初始的data.json。来自Django文档:
If you create a fixture named initial_data., that fixture will be loaded every time you run syncdb. This is extremely convenient, but be careful: remember that the data will be refreshed every time you run syncdb. So don't use initial_data for data you'll want to edit.
参见:文档
就个人而言,我认为每次发生更改时都需要重新加载的初始数据的用例是延迟的,因此我从不使用initial_data.json。
由于您使用的是South,所以更好的方法是在迁移所需的特定fixture上手动调用loadData。在初始数据的情况下,这将进入您的0001_initial.py迁移。
1 2 3 | def forwards(SELF, orm): FROM django.core.management import call_command call_command("loaddata","my_fixture.json") |
参见:http://south.aeracode.org/docs/fixtures.html
另外,请记住,到fixture的路径是相对于项目根目录的。因此,如果您的设备位于"myproject/myapp/fixtures/my洹fixture.json"
1 | call_command('loaddata', 'myapp/fixtures/my_fixture.json') |
当然,您的fixture不能命名为"initial_data.json",否则,默认行为将接管。