摘要:類之間的循環(huán)依賴代碼大致是這樣的這樣,依賴,依賴,又會回到,這樣肯定就是錯誤的了。因為在引用的時候,會回到查找引用的,但是這個時候的構(gòu)建還沒有完成,就會導(dǎo)入錯誤。也就是使用字符串表示模塊,而不進行導(dǎo)入了。
最近使用Python + Django,是一個巨復(fù)雜的系統(tǒng),才幾天就40多張數(shù)據(jù)庫的表了。因為在Django里面,表都使用類來實現(xiàn)的,所以就要一開始寫很多的class,語法都沒問題,但是有時候就會出現(xiàn)ImportError Can not import name xxxx
這個問題遇見了兩次,稍微有點差別,現(xiàn)在記錄一下來。
1.類之間的循環(huán)依賴
代碼大致是這樣的
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的構(gòu)建還沒有完成,就會導(dǎo)入錯誤。這個和Python的機制有關(guān)系的。
3.解決辦法
今天又遇見這問題了,雖然找到了原因,但是不知道怎么去修改,因為畢竟業(yè)務(wù)邏輯在這,現(xiàn)在有stackoverflow上找到一個答案,真心好用。
也就是使用字符串表示模塊,而不進行導(dǎo)入了。
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
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/37320.html
摘要:是可視化工具中最棒的,但是,在處理視圖的導(dǎo)入導(dǎo)出方面,它是按照視圖名稱的字母順序來處理的,若視圖存在依賴,在導(dǎo)入過程中就會報錯。 navicat是mysql可視化工具中最棒的,但是,在處理視圖的導(dǎo)入導(dǎo)出方面,它是按照視圖名稱的字母順序來處理的,若視圖存在依賴,在導(dǎo)入過程中就會報錯。這個問題一直困繞我,一度因為我使用docker來部署mysql而繞過了這個問題。最近不得不直面這個問題,因...
摘要:注模板包含不存在此問題。在模板中,使用過濾器顯式地標(biāo)記一個字符串為安全的臨時地完全禁用自動轉(zhuǎn)義系統(tǒng)。通過在聲明中直接添加或,當(dāng)前的上下文可以傳遞到模板,而且不會自動禁用緩存。 官網(wǎng):http://jinja.pocoo.org/docs/dev/中文文檔:http://docs.jinkan.org/docs/j...當(dāng)前版本2.8 安裝:pip install Jinja2Flask...
摘要:假設(shè)我們需要在程序中計算一些數(shù)字的平方根。此外如果我們需要在程序中多次使用平方根函數(shù),代碼將會更整潔。然而在這個虛構(gòu)的例子中,只有的年齡超過歲。然后檢查這三個人的年齡是否滿足第二個條件。 作者:?Christopher Tao翻譯:王可汗校對:王雨桐本文約1800字,建議閱讀5分鐘本文...
摘要:記錄前段時間學(xué)習(xí)時遇到的循環(huán)導(dǎo)入問題何為循環(huán)導(dǎo)入栗子很簡單現(xiàn)在有三個包中導(dǎo)入中導(dǎo)入中導(dǎo)入然后隨便以一個文件為入口執(zhí)行程序假如以作為程序入口大概就像下面這樣現(xiàn)在執(zhí)行就會報出導(dǎo)入錯誤類似下面這個詳細介紹在核心編程中有介紹有時間可以看一下重點是 記錄前段時間學(xué)習(xí) Flask 時遇到的循環(huán)導(dǎo)入問題 何為循環(huán)導(dǎo)入? 栗子很簡單, 現(xiàn)在有a.py, b.py, c.py 三個包, b.py 中導(dǎo)入...
閱讀 2875·2021-11-11 10:58
閱讀 1932·2021-10-11 10:59
閱讀 3499·2019-08-29 16:23
閱讀 2347·2019-08-29 11:11
閱讀 2794·2019-08-28 17:59
閱讀 3845·2019-08-27 10:56
閱讀 2087·2019-08-23 18:37
閱讀 3121·2019-08-23 16:53