我有兩個應用程序,commonapp
和app1
。Django:擺脫循環依賴
這裏的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)
當我嘗試從任一app1
或commonapp
運行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而不是實際的類,但這不起作用。我也不能指定一個字符串作爲派生類中的基類名。
沒有重構我的模型,這樣的循環依賴可能嗎?
把SomeFields放在app1/models.py – lalo
我不想這樣做。我可以將所有內容放在一個models.py中,但我想避免這樣做。該項目由不同的人開發,每個人都被分配了一個應用程序。考慮到開發組織和模型的邏輯應用程序位置,它使得模型變得更加清潔,以使模型處於不同的應用程序中。 – user2233706
你的應用程序是什麼? – lalo