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

标签 django postgresql django-south

编辑:我明白发生这种情况的原因。这是因为 `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/

相关文章:

python - 断言错误: Cannot apply DjangoModelPermissionsOrAnonReadOnly on a view that does not set `.queryset` or have a `.get_queryset()` method

python - 获取 Django 中所有唯一的 prefetch_lated 对象

c# - Linq2db:查询对象层次结构的有效方法

python - Django 南 : How can I access models in sub-packages in migrations

python - 减少 Django 内存使用。低悬的果实?

python - 模型中的额外 ID

sql - 如何显示来自两个 'select' 的结果表?数据库

database - PostgreSQL 仅导出模式结构

mysql - 在现有数据库上安装 South 时出现问题。 MySql 不支持 'schema-altering statements'

Django 数据库在迁移中挂起