假设我有两个django应用程序:
在比赛应用程序中,我有一个代表比赛部分的模型:
class Division(models.Model):
competition = models.ForeignKey(Competition)
discipline = models.CharField(max_length=1, choices=DISCIPLINE_CHOICES)
age_group = models.ForeignKey(AgeGroup)
participants = models.ManyToManyField(Competitor, through='Entry')
我想将Entry模型放入条目app:
class Entry(models.Model):
division = models.ForeignKey('Division')
competitor = models.ForeignKey(Competitor)
withdrawn = models.BooleanField(default=False)
如何解决from ... import ...语句,以便它们有效?当我输入from entries.models import Entry
等导入语句时,我从syncdb忽略了这些应用程序中的模型(因为导入是循环的),或者当我删除其中一个或两个时,我得到验证错误:
错误:一个或多个模型没有 validate:entries.entry:'division' 与模特师有关系, 没有安装或 是抽象的。 competitions.division: '参与者'指定m2m 通过模型Entry的关系 尚未安装
我理解为什么会发生这种情况,但我不知道如何更改它,以便它可以工作(不需要将Entry模型移动到竞赛应用程序中,我真的不想这样做。)
答案 0 :(得分:16)
似乎我找到了一个更有效的答案:)
Django documentation on the ForeignKey class说:
引用另一个中定义的模型 应用程序,你可以明确 指定一个完整的模型 申请标签。例如,如果 上面的制造商型号定义于 另一个叫做生产的应用 你需要使用:
class Car(models.Model):
manufacturer = models.ForeignKey('production.Manufacturer')
这种参考可能很有用 在解决循环导入时 两个应用程序之间的依赖关系。
答案 1 :(得分:5)
有时,django.db.models.get_model
有助于解决循环导入问题。在您的示例中,尝试正常导入Entry
并将division
中的Entry
FK定义更改为:
from django.db.models import get_model
class Entry(models.Model):
division = models.ForeignKey(get_model('competitions', 'Division'))