Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django迁移失败了_Python_Django_Postgresql - Fatal编程技术网

Python Django迁移失败了

Python Django迁移失败了,python,django,postgresql,Python,Django,Postgresql,我有一个django/postgresql应用程序。无论何时运行最新的迁移,我都会收到以下错误: ValueError:为包(专业、标题)找到错误数量(0)的约束 我相信我需要定制迁移,但是我应该做什么改变呢 这就是迁移: 操作=[ migrations.AddField( model_name='package', name='speciality', field=models.ManyToManyField(related_nam

我有一个django/postgresql应用程序。无论何时运行最新的迁移,我都会收到以下错误:

ValueError:为包(专业、标题)找到错误数量(0)的约束

我相信我需要定制迁移,但是我应该做什么改变呢

这就是迁移:

操作=[

    migrations.AddField(

        model_name='package',

        name='speciality',

        field=models.ManyToManyField(related_name='specialities', to='speciality.Speciality', blank=True),

    ),

    migrations.AlterField(

        model_name='package',

        name='title',

        field=models.CharField(unique=True, max_length=50),

    ),

    migrations.AlterUniqueTogether(

        name='package',

        unique_together=set([]),

    ),

    migrations.RemoveField(

        model_name='package',

        name='speciality',

    ),

]
这是此型号的当前表配置:

sleepyfish=#\d软件包 表“public.package” 列|类型|修饰符
---------------+--------------------------+------------------------------------------------------id |整数|非空默认值 nextval('package_id_seq'::regclass)在|时间戳处创建,带有 时区|非空更新|时间戳带时区|非空 空标题|字符变化(50)|非空描述 |文本|状态|布尔值
|非空价格|数字(8,2)|非空 专业| id |整数|索引: “package_pkey”主键,btree(id) “package_speciality_id_3aeb5c97679442e4_uniq”唯一约束,btree(speciality_id,title) “package_66db61fe”btree(speciality_id)外键约束: “package_speciality_id_4255b58fe1ae00c0_fk_speciality_id”外键(speciality_id)最初引用可延迟的speciality(id) 延期提交人: 表“claimedpackage”约束“claimedpackage\ U package\ U id\ U 9e1da358fbb9a46\ U fk\ U package\ U id”外键 (package_id)引用最初可延迟的包(id) 表“包服务”约束“包服务包id”3b0ea08bfcd8da76\U fk\U包id”外部 KEY(package_id)引用最初可延迟的package(id)


看起来您遇到了有文档记录的Django错误。该错误是(并且正确地是),因此不幸的是,没有干净的解决方案来解决该问题

数据库定义中的unique together约束显示为

"package_speciality_id_3aeb5c97679442e4_uniq" UNIQUE CONSTRAINT,
btree (speciality_id, title)
如果要删除此约束,则需要确保迁移文件中的
unique\u-ather
定义与数据库定义一致。请尝试用以下内容替换
alteruniqueather
行:

migrations.AlterUniqueTogether(
    name='package',
    unique_together=set([('speciality_id', 'title')]),
),

以防有人遇到和我一样的问题:
我有一个多租户系统,其中每个租户都有自己的模式,
public
模式保留为空

当Django试图检查数据库的当前状态以删除与历史约束匹配的真正唯一约束时,它只查看
public
架构内部,忽略
数据库设置中
选项
中设置的架构信息

关于这个问题,有几张票尚未公开,看不到真正的解决方案:和


您可以随时编写自己的数据库后端来避免此问题,或者向Django!提交拉取请求。

如果来自
arjun27
的答案无法解决您的问题,则这是另一种选择

今天,当我试图从Django模型中一起删除unique_时,我遇到了同样的问题(与问题完全相同的关键字)。我使用的是Django 1.11

阅读
arjun27
中的文档和参考资料,据我所知,迁移过程将使用上述案例,尝试在Postgresql上为字段
(专业,标题)
找到唯一的矛盾

我尝试查找表上的唯一约束,但未找到

因此,我直接从SQL控制台创建唯一约束

ALTER TABLE package ADD UNIQUE (speciality, title)
然后我重新运行迁移


希望有帮助。

您是否在默认情况下将某个值定义为特殊值?能否显示
型号的代码。py