Python Django使用整数字段作为外键字段

Python Django使用整数字段作为外键字段,python,django,django-models,orm,django-admin,Python,Django,Django Models,Orm,Django Admin,为了支持旧(传统)数据库,我们必须创建一个表,使用整型字段作为外键到用户表:我们的模型是这样的: class UserHistory(): user_id = models.IntegerField(null=True, blank=True) # ..... (other fields) ..... 问题是用户表中可能存在或不存在用户id。是否有任何方法将该用户id字段视为用户talbe的外键(如果存在)?因此,我可以在django admin或其他地方显示,而不仅仅是ID。

为了支持旧(传统)数据库,我们必须创建一个表,使用整型字段作为外键用户表:我们的模型是这样的:

class UserHistory():
    user_id = models.IntegerField(null=True, blank=True)
    # ..... (other fields) .....

问题是用户表中可能存在或不存在用户id。是否有任何方法将该用户id字段视为用户talbe的外键(如果存在)?因此,我可以在django admin或其他地方显示,而不仅仅是ID。

您可以使用带有
db\u constraint=False的
ForeignKey
字段。有关警告,请参阅,但旧版无效数据是合理的情况之一。

向数据库添加第二列,并使用SQL将另一个表中没有相应对象的字段清空。然后在此新字段中定义您的django模型。

为什么不使用
模型。ForeignKey
?这些表是否位于不同的数据库中?我们必须从遗留系统导入数据。如果我们在开始时将模型创建为Foreignkey,当该键不存在时,它将引发Foreignkey约束。旧的系统是丑陋的:(您知道,外键也可以为空。是的,但我在用户历史记录中发现它们有该id,但旧用户表中不存在该id….这导致django引发查询匹配not exist Exception a
db_constraint=False
参数到
ForeignKey
字段将阻止django创建约束(通常这是一个坏主意,但无效的旧数据意味着它可能是必要的),但是你必须做大量的工作来让管理员工作,而不是在寻找丢失的用户时例外。当django admin(1.10)点击不存在行时,它将在foreignkey列中显示破折号