Django南迁移错误与postgresql数据库中的唯一字段

编辑:我明白这发生的原因。 这是因为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”

详细信息:密钥(anahtar)=(blog_baslik)已经存在。

我想保持该领域的独特性,但仍然迁移该领域。 顺便说一下,只要数据库中的其他表保持不变,那么该表上的数据丢失是可以接受的。


这实际上是每次运行initial_data.json时syncdb的默认行为。 从Django文档:

如果您创建一个名为initial_data。[xml / yaml / json]的夹具,那么每次运行syncdb时都会加载该夹具。 这非常方便,但要小心:请记住,每次运行syncdb时都会刷新数据。 所以不要使用initial_data作为你想要编辑的数据。

请参阅:https://docs.djangoproject.com/en/dev/howto/initial-data/#automatically-loading-initial-data-fixtures

就个人而言,我认为每次发生更改时需要重新加载的初始数据的用例都会受到阻碍,所以我从不使用initial_data.json。

更好的方法是,因为您使用的是南,所以需要在您的迁移所需的特定夹具上手动调用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',否则默认行为将被接管。

链接地址: http://www.djcxy.com/p/38677.html

上一篇: Django south migration error with unique field in postgresql database

下一篇: queries across relationships