Django迁移失败:ForeignKey配置错误引发SystemCheckError
Django模型迁移ForeignKey错误修复方案
你的代码里有两处错误导致了迁移报错:
- ForeignKey第一个参数错误:你写了
Organisation(),这是实例化了一个Organisation对象,但Django外键需要传入的是模型类本身,而非实例。 - to_field参数使用错误:你直接写了
id,这会被解析为当前Team模型的id字段,而非Organisation的id字段。而且这个参数完全可以省略——因为Django默认会关联目标模型的主键字段。
修正后的模型代码如下:
Organisation模型(无需修改)
class Organisation(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=256) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) status = models.CharField(max_length=64, choices=STATUS, default='active') logo_file_path = models.CharField(max_length=2048)
Team模型(修正外键部分)
class Team(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=256) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) status = models.CharField(max_length=64, choices=STATUS, default='active') # 修正后的外键写法,无需to_field,直接传入模型类 org_id = models.ForeignKey(Organisation, on_delete=models.CASCADE)
如果出于某种原因你一定要显式指定to_field,正确写法是传入字符串形式的字段名:
org_id = models.ForeignKey(Organisation, to_field='id', on_delete=models.CASCADE)
修改完成后,重新执行python manage.py makemigrations和python manage.py migrate命令即可正常完成迁移。
内容的提问来源于stack exchange,提问作者Aditya Prasad
相关产品推荐
相关产品推荐

