如何防止这些Django模型中的循环引用?

时间:2014-12-20 23:25:41

标签: python django circular-reference

假设我的项目中有2个Django应用程序:appA,appB。

appA在models.py中包含ModelA,如下所示:

class ModelA(models.Model):
    field1 = models.CharField(max_length=254, null=False, blank=False,)

appB在其modesl.py中包含ModelB,如下所示:

from appA.models import modelA

class ModelB(models.Model):
    field2 = models.CharField(max_length=254, null=False, blank=False,)
    model_A = models.ForeignKey(ModelA, related_name="blahblah")

现在我想向ModelA添加一个@property函数,该函数将返回将ModelA作为其外键的ModelB的所有实例:

@property
def matching_model_bs(self):
    return ModelB.objects.filter(model_A=self)

但要做到这一点,我必须将appB.models导入appA.models,但这会导致循环导入。 那么如何在不进入循环导入的情况下实现这一目标呢?

1 个答案:

答案 0 :(得分:4)

不需要那个属性。该功能已经内置:您只需执行mymodelA.modelb_set.all()

(实际上,由于您在此处设置了related_name,因此它将是mymodelA.blahblah.all()。)

请参阅following relations backward上的文档。