【发布时间】:2020-06-06 02:42:01
【问题描述】:
我在 django 中为旧数据库使用 inspectdb 时遇到问题。我相信我的问题本质上与这里描述的相反:
Django suffix ForeignKey field with _id
我的数据库中的许多字段名称以“_id”结尾。在运行 inspectdb 时,那些以“_id”结尾并且也是 ForeignKeys 或 OneToOneFields 的字段将删除“_id”:
class AssayClassMap(models.Model):
ass_cls_map_id = models.BigIntegerField(primary_key=True)
assay = models.ForeignKey('Assays', models.DO_NOTHING, blank=True, null=True)
我可以通过将上面的行改为这样来解决这个问题:
class AssayClassMap(models.Model):
ass_cls_map_id = models.BigIntegerField(primary_key=True)
assay_id = models.ForeignKey('Assays', models.DO_NOTHING, blank=True, null=True, db_column='assay_id')
问题在于,每次为该数据库和其他数据库生成模型文件时,都需要手动更改数百个。我可以想出一个脚本来纠正这些问题,但我想有一些解决方法。
谢谢
【问题讨论】:
-
为什么会出现这个问题?数据库中的字段名称仍将包含 _id,因为 Django 将“_id”附加到所有外键。当您为这些字段设置值时,您可以将对象设置为 (assay=AssayObject)。或者将值设置为附加“_id”的字段名称 (assay_id=1)。
-
我相信我现在看到问题可能出在“model_to_dict”函数中。输出字典键对应于 Django 模型字段名称(缺少“_id”)而不是数据库字段名称
-
我解决了!问题出在 model_to_dict 函数而不是 django 问题