2013-06-29 141 views
2

我有兩個應用程序,commonappapp1Django:擺脫循環依賴

這裏的commonapp/models.py

from django.db import models 
#from app1.models import SpecificFields 

# Create your models here. 
class CommonFields(models.Model): 
    a = models.IntegerField(default = 0) 

    class Meta: 
     abstract = True 

class SomeFields(models.Model): 
# a = models.ForeignKey(SpecificFields) 
    a = models.ForeignKey('app1.models.SpecificFields') 

和這裏的app1/models.py

from django.db import models 
from commonapp.models import CommonFields 

# Create your models here. 
class SpecificFields(CommonFields): 
    a2 = models.IntegerField(default=0) 

當我嘗試從任一app1commonapp運行SQL,我得到以下錯誤:

$ python manage.py sql commonapp 
CommandError: One or more models did not validate: 
commonapp.somefields: 'a' has a relation with model app1.models.SpecificFields, 
which has either not been installed or is abstract. 

我意識到這是一個問題的循環依賴。其他人建議將類路徑指定爲string而不是實際的類,但這不起作用。我也不能指定一個字符串作爲派生類中的基類名。

沒有重構我的模型,這樣的循環依賴可能嗎?

+0

把SomeFields放在app1/models.py – lalo

+0

我不想這樣做。我可以將所有內容放在一個models.py中,但我想避免這樣做。該項目由不同的人開發,每個人都被分配了一個應用程序。考慮到開發組織和模型的邏輯應用程序位置,它使得模型變得更加清潔,以使模型處於不同的應用程序中。 – user2233706

+0

你的應用程序是什麼? – lalo

回答

6

導入app1.models介於CommonFieldsSomeFields之間的某處。

+0

哇,你一定是在開玩笑吧。我無法相信這是行得通的。謝謝。 – user2233706

+0

@ user2233706你真的應該嘗試解決循環依賴問題。如果'common'真的很常見,那麼它不應該依賴於'specific'的東西。 –

+0

我明白了。問題是我有另一個應用程序,依賴於'common',但不是'app1'。 – user2233706