python - django InspectDB 'unique_together' 指的是不存在的字段

标签 python django inspectdb

我有一个遗留数据库,我希望将其用作 django 项目中的第二个数据库。我将数据库添加到我的设置文件中,然后运行:

python manage.py inspectdb --database=images

脚本不到一秒就完成了,结果令人震惊。它理解我所有的 table ——至少我一开始是这么认为的。当我尝试运行时:

python manage.py migrate --database=images

我遇到这样的错误:

'unique_together' refers to the non-existent field 'commentaryId'.

所有引发错误的表都是多对多链接表,其中包含两个 id 字段,这两个字段一起形成主键(因此必须“共同唯一”)。

这是由inspectdb创建的模型之一,引发了此错误:

class Pagescanannotationscommentaries(models.Model):
    pagescanannotationid = models.IntegerField(db_column='pageScanAnnotationId')  # Field name made lowercase.
    commentaryid = models.IntegerField(db_column='commentaryId')  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'PageScanAnnotationsCommentaries'
        unique_together = (('pageScanAnnotationId', 'commentaryId'),)

我在 stackoverflow 中发现了几个像我这样的问题,但这些建议对我没有帮助,或者显然不相关。但我确实在谷歌群组中找到了一篇帖子,给了我修复它的提示:https://groups.google.com/forum/#!topic/django-users/_phTiifN3K0

但即便如此,我发现我的问题还是有点不同,我在下面的答案中进行了解释。

最佳答案

这是 Django 1.8 中的一个错误,请参阅 #25274 。它已在 1.8.8 中修复。您应该升级到最新的 1.8.x 版本。

请注意,从 1.8.x 到 1.8.x+1 的次要版本升级仅包括错误修复和安全更新。您应该始终致力于使用最新的次要版本。只有主要版本升级(从 1.Y 到 1.Y+1)可能会破坏弃用时间表中概述的兼容性。

关于python - django InspectDB 'unique_together' 指的是不存在的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39366071/

相关文章:

python - Django inspectdb 'unique_together' 指的是不存在的字段(2015)

python - lxml doc.find 返回 None

python - 将 django 模型实例保存到另一个模型中

python - 在 Django urlpatterns 中省略 'url(' 有什么意义

django - 根据与登录用户的关系限制表单选项

django - 如何从包含 1000 个表的数据库中检查 1 个表

python - 使用大型旧版 MySQL 数据库时,我可以在多大程度上依赖 django 的spectrdb 命令?

python - 如何重新排序和重命名 pandas pivot?

python - 如何将 'io.BufferedWriter' 转换为 'Dataframe' - Python

python - PY : Url Encode without variable name