编辑:我理解为什么会这样。这是因为initial_data.json文件的存在。南方希望在迁移后添加这些装置,但由于场的独特属性而失败。
您好,
我改变了我的模型:
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:重复键值违反唯一约束“blog_setting_anahtar_key”
详细信息:Key(anahtar)=(blog_baslik)已经存在。
我希望该字段保持唯一,但仍然会迁移该字段。顺便说一下,只要db中的其他表保持不变,该表上的数据丢失是可以接受的。
答案 0 :(得分:1)
这实际上是syncdb每次运行initial_data.json的默认行为。来自Django文档:
如果你创建一个名为initial_data。[xml / yaml / json]的灯具,每次运行syncdb时都会加载该灯具。这非常方便,但要小心:请记住,每次运行syncdb时都会刷新数据。所以不要将initial_data用于您想要编辑的数据。
请参阅: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',否则,默认行为将接管。