编辑:我明白发生这种情况的原因。这是因为 `initial_data.json` 文件的存在。显然,south 想在迁移后添加这些固定装置,但由于字段的独特属性而失败。
我改变了我的模型:
class Setting(models.Model):
anahtar = models.CharField(max_length=20,unique=True)
deger = models.CharField(max_length=40)
def __unicode__(self):
return self.anahtar
对此,
class Setting(models.Model):
anahtar = models.CharField(max_length=20,unique=True)
deger = models.CharField(max_length=100)
def __unicode__(self):
return self.anahtar
架构迁移命令已成功完成,但是尝试迁移时出现此错误:
IntegrityError: duplicate key value violates unique constraint "blog_setting_anahtar_key" DETAIL: Key (anahtar)=(blog_baslik) already exists.
我想保持该字段的唯一性,但仍要迁移该字段。顺便说一句,该表上的数据丢失是可以接受的,只要数据库中的其他表保持完好无损。
最佳答案
每次运行initial_data.json实际上是syncdb的默认行为。来自 Django 文档:
If you create a fixture named initial_data.[xml/yaml/json], 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.
参见:docs
就我个人而言,我认为每次发生更改时都需要重新加载初始数据的用例是延迟的,所以我从不使用 initial_data.json。
由于您使用的是 South,因此更好的方法是在迁移所需的特定装置上手动调用 loaddata。对于初始数据,它将进入您的 0001_initial.py 迁移。
def forwards(self, orm):
from django.core.management import call_command
call_command("loaddata", "my_fixture.json")
参见:http://south.aeracode.org/docs/fixtures.html
此外,请记住,您的夹具的路径是相对于项目根目录的。因此,如果您的夹具位于“myproject/myapp/fixtures/my_fixture.json”,call_command
实际上看起来像:
call_command('loaddata', 'myapp/fixtures/my_fixture.json')
当然,您的夹具不能命名为“initial_data.json”,否则将采用默认行为。
关于Django 南迁移错误与 postgresql 数据库中的唯一字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7052633/