尝试在Django中链接表时不兼容的外键?

问题描述

我正在尝试创建几个基本模型,并使用外键将它们链接在一起。

一个工具

class tool1(models.Model):
    tool_id = models.CharField(
        max_length=100,primary_key=True,verbose_name="Tool",)

    description = models.CharField(
        default="",max_length=100,verbose_name="Description",help_text="Describe tool here",)

我首先将其迁移到数据库。一切正常,Django成功在数据库中创建了新表。然后,我尝试通过外键进行引用。

参考工具

class Tool2(models.Model):
     tool1 = models.ForeignKey(
        Tool,default=None,on_delete=models.PROTECT
        blank=True
    )

出于某种原因,我引用的其他工具也可以使用,但是该工具无法使用。我收到以下错误

django.db.utils.OperationalError: (3780,"Referencing column 'tool1' and referenced column 'tool_id' in foreign key constraint [FK Name] are incompatible.")

由于引用工具成功引用了其他多个工具,所以我无法弄清楚为什么会发生这种情况,但是它不会链接到该工具。此错误的原因是什么?以及如何解决它以便链接表?为什么它们不兼容?

解决方法

尝试从tool_id中删除主键约束。 models.Model具有您继承的主键字段。

编辑: 设置外键时不要使用冗长的名称。在tool2中设置外键时,请使用tool1代替tool。 tool是tool1的详细名称,而冗长的名称仅用于人类,因此与数据库无关。