位置: 编程技术 - 正文
推荐整理分享django model去掉unique_together报错的解决方案(django modelform),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:django的models,django unicorn,django unicorn,django modelviewset,django models.py,django modelform,django中的model,django modelform,内容如对您有帮助,希望把文章链接给更多的朋友!
事情是这样的,我有一个存储考试的表
category 表示考试的类型, date 表示考试的日期。建表的时候考虑到一个类型的考试在同一个应该只有一个考试,所以就加了一个 unique_together 。但是由于业务需要,这个 unique_together 不需要了。
用过 django 的人都知道,这不是个大问题,删掉 unique_together 的代码,然后 makemigrations 呗,确实,我就这么做了。但是当我 migrate 的时候却报错了,错误如下:
数据库不让我删除这个 index ,并且告诉我有一个 外键约束 用到了这个它。我就奇怪了,category是外键没错,但是我这个是 unique_together 啊,怎么可能有哪个外键用到了它呢?
没办法,我只能到数据库里寻找答案, show create table exam ,输出如下:
可以看到 UNIQUE KEY 那一行就是 unique_together ,下面一行是 category 外键。没有其他东西了啊,到底哪个外键用到了我们的 unique_together ?
外键只能是 category 了,也没有别的外键啊。到底是怎么回事呢?
原因是这样的: 在Mysql中外键会自动在表上添加一个index ,也就说如果没有unique_together,我们的表应该是这样的:
但是因为有了 unique_together 的 unique_key ,并且 category 在联合索引的左边,根据 最左前缀 原则, category 的索引就有了,所以就不会另外建索引,这个时候 category 的外键约束就依赖了这个 unique_key ,所以删除的时候会出现那样的报错。
机智的小伙伴应该想到了,如果我们要去掉 unique_together ,我们可以将 category 的 KEY 加回去,这样就可以将 unique_together 删掉了。 sql 如下:
这样,migrate就能成功了。
python 队列详解及实例代码 队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。Queue模块最常与threading模块一起构成生产-消
python 异常处理总结 最近,做个小项目经常会遇到Python的异常,让人非常头疼,故对异常进行整理,避免下次遇到异常不知所措,以下就是对Python异常进行的整理。1.Python异
Python 序列的方法总结 最近在做Python的项目,特地整理了下Python序列的方法。序列sequence是python中最基本的数据结构,本文先对序列做一个简单的概括,之后简单讲解下所有序
标签: django modelform
本文链接地址:https://www.jiuchutong.com/biancheng/384428.html 转载请保留说明!友情链接: 武汉网站建设