我有一个遗留数据库,我希望将其用作 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/