Django同文件模型类用ForeignKey提示未定义,需导入类吗?
出现这个错误的核心原因是Python代码的执行顺序问题,和“同一文件是否需要导入”无关——同一文件内的类确实不需要额外导入,但必须保证当代码执行到Article类的ForeignKey时,Author类已经被定义过。
常见原因及解决办法:
类定义顺序颠倒
如果你的代码里Article类写在Author类前面,Python从上到下执行代码时,解析到Article里的ForeignKey(Author...)时,Author类还没被定义,就会抛出“未定义”的警告。解决方法:调整类的顺序,把
Author放在Article前面:from django.db import models class Author(models.Model): name = models.CharField(max_length=100) # 其他字段定义 class Article(models.Model): title = models.CharField(max_length=200) author = models.ForeignKey(Author, on_delete=models.CASCADE) # 其他字段定义不想调整类顺序的替代方案
如果你因为某些原因不想调整类的定义顺序,可以用字符串形式引用模型类名,Django会在模型初始化阶段自动解析这个字符串并找到对应的模型:from django.db import models class Article(models.Model): title = models.CharField(max_length=200) # 用字符串'Author'代替直接引用类 author = models.ForeignKey('Author', on_delete=models.CASCADE) # 其他字段定义 class Author(models.Model): name = models.CharField(max_length=100) # 其他字段定义
额外说明:
同一文件内的类不需要手动导入,但Python是解释型语言,代码逐行执行,所以必须保证被引用的类在引用点之前已经被定义。如果是跨文件的模型引用,才需要用app_name.ModelName的字符串形式或者导入对应类。
内容的提问来源于stack exchange,提问作者Ruan Molinari
相关产品推荐
相关产品推荐

