升级到 django 1.11 多对多列未找到
Posted
技术标签:
【中文标题】升级到 django 1.11 多对多列未找到【英文标题】:Upgrading to django 1.11 many to many column not found 【发布时间】:2018-08-20 19:38:56 【问题描述】:我正在将一个项目从 Django 1.10.8 升级到 1.11,但我的单元测试中突然出现奇怪的错误。
我使用了一个小技巧来更新现有的多对多关系,以使用带有额外“订单”字段的自定义“通过”表。在 1.10 中一切正常,但现在在 1.11 中失败了
django.db.utils.ProgrammingError: column api_session_pollgroups.pollgroup_id does not exist
我的模型代码如下所示:
class SessionPollGroup(models.Model):
session = models.ForeignKey('api.Session')
pollgroup = models.ForeignKey('api.PollGroup')
order = models.PositiveSmallIntegerField(default=0)
class Meta:
db_table = 'api_session_pollgroups'
ordering = ('order',)
当最初的多对多关系建立时,表“api_session_pollgroups”已经存在,我“劫持”它以添加额外的订单字段。
会话模型上的关系如下所示
pollgroups = models.ManyToManyField('api.PollGroup',
related_name='sessions',
through=SessionPollGroup)
任何人都知道为什么这将无法在 django 1.11 而不是 1.10 中生成或找到正确的数据库模式?
注意:这似乎只出现在单元测试期间,当我使用常规迁移创建新数据库时,表似乎在我的开发数据库 (postgres) 中正确创建,但在单元测试数据库 (sqlite) 中没有正确创建
谢谢!
编辑:已经扫描了变更日志,但看不到任何关于此的内容。我能想到的最好的办法是与表空间有关,但我不知道到底是什么。
【问题讨论】:
你试过运行makemigrations
吗?
是的,什么都没出现:(
【参考方案1】:
看起来问题实际上与相关模型的(很多)更早重命名有关。下面链接的 django 票很好地描述了这个问题:
https://code.djangoproject.com/ticket/29000
重命名模型的早期迁移在 django 1.11 中未正确解决(这已从 1.10 更改),并且在表重命名后未更新相关的外键列名称。票证中详述的 polyfill 迁移操作类为我解决了这个问题。
【讨论】:
以上是关于升级到 django 1.11 多对多列未找到的主要内容,如果未能解决你的问题,请参考以下文章