【发布时间】:2017-01-07 07:35:36
【问题描述】:
为了支持旧的(遗留)数据库,我们必须创建一个使用 integer field 作为 foreignkey 到 User 表的表:这是我们的模型是什么样子的:
class UserHistory():
user_id = models.IntegerField(null=True, blank=True)
# ..... (other fields) .....
问题是用户表中可能存在也可能不存在用户 ID。有没有办法将该 user_id 字段视为用户 talbe 的外键(如果存在)?所以我可以在 django admin 或其他地方显示,而不仅仅是 ID。
【问题讨论】:
-
你为什么不用
models.ForeignKey?这些表是否位于不同的数据库中? -
我们必须从遗留系统中导入数据。如果我们在开始时将模型创建为外键,则当该键不存在时,它将提高外键约束。旧系统很丑:(
-
外键也可以为空,你知道的。
-
是的,但我在用户历史记录中发现他们有 thatid 但旧用户表中不存在该 id....导致 django 引发查询匹配不存在异常
-
db_constraint=False参数到ForeignKey字段将阻止 Django 创建约束(通常是一个坏主意,但无效的旧数据意味着它可能是必要的),但你必须这样做做大量工作以使管理员工作,而不是在寻找丢失的用户时例外。
标签: python django django-models orm django-admin