Python中循环导入和依赖错误
admin
2023-07-31 01:48:50
0

最近使用Python + Django,是一个巨复杂的系统,才几天就40多张数据库的表了。因为在Django里面,表都使用类来实现的,所以就要一开始写很多的class,语法都没问题,但是有时候就会出现ImportError Can not import name xxxx

这个问题遇见了两次,稍微有点差别,现在记录一下来。

1.类之间的循环依赖
代码大致是这样的

class Employee(models.Model):
    permission = models.ManyToManyField(Permission)
class Permission(models.Model):
    dealer = models.ForeiginKey(Dealer)
    name = models.CharField(max_length=20)
class Dealer(models.Model):
    employees = models.ManyToManyField(Employee)

这样,Employee依赖Permission,Permission依赖Dealer,Dealer又会回到Employee,这样肯定就是错误的了。

2.不同模块之间的
Service.model 模块

from Appointment.models import Appointment

class Order(models.Model):
    appointment = models.ForeignKey(Appointment)

在Appointment.models里面

from Service.models import ServiceItem

这样也会引用错误,这个原因找了好长时间。
因为Order在引用Appointment的时候,会回到Service.models 查找Appointment引用的ServiceItem,但是这个时候Order的构建还没有完成,就会导入错误。这个和Python的机制有关系的。

3.解决办法
今天又遇见这问题了,虽然找到了原因,但是不知道怎么去修改,因为毕竟业务逻辑在这,现在有stackoverflow上找到一个答案,真心好用。
也就是使用字符串表示模块,而不进行导入了。
http://stackoverflow.com/questions/4379042/django-circular-model-import-help

class Service(models.Model):
    appointment = models.ForeignKey(\"appointment.Appointment\")

参考
http://www.douban.com/group/topic/43938606/
http://www.oschina.net/question/919901_88601
http://www.oschina.net/translate/top-10-mistakes-that-python-programmers-make

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...