【问题标题】:How to prevent circular references in these Django models?如何防止这些 Django 模型中的循环引用?
【发布时间】:2015-02-19 12:37:59
【问题描述】:

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

appA在其models.py中包含如下ModelA:

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

appB在其model.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,但这会导致循环导入。 那么如何在不遇到循环导入的情况下实现这一点呢?

【问题讨论】:

    标签: python django circular-reference


    【解决方案1】:

    不需要那个属性。该功能已经内置:您可以使用mymodelA.modelb_set.all()

    (其实这里既然设置了related_name,那就是mymodelA.blahblah.all()。)

    请参阅following relations backward 上的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      相关资源
      最近更新 更多