首页 > 解决方案 > ImportError:无法从部分初始化的模块“maca.models”导入名称“Maca”(很可能是由于循环导入)

问题描述

我有这个错误ImportError: cannot import name 'Maca' from partially initialized module 'maca.models' (most likely due to a circular import)

我有这样的代码

from maca.models import Maca
class Maca2(models.Model)
   maca = models.ForeignKey(
     Maca, on_delete=models.CASCADE
)

现在为“Maca”建模,我正在尝试像这样访问每个“Maca2”对象

from maca2.models import Maca2
class Maca(models.Model)
  ...


@property
maca_has_maca2(self)
  maca2 = Maca2.objects.filter(maca=self.id)

你能帮我处理这个吗?

标签: pythondjangoweb

解决方案


Maca2您可以在maca_has_maca2属性中导入:

# no import of maca2.models

class Maca(models.Model):
    # …

    @property
    def maca_has_maca2(self):
        from maca2.models import Maca2
         maca2 = Maca2.objects.all()

对于ForeignKeys、OneToOneFields 和ManyToManyFields,您可以使用带有 as 结构的字符串文字来引用模型,例如:'app_name.ModelName'

# no import of maca2.models

class Maca(models.Model):
    maca2 = models.ForeignKey(
        'maca2.Maca2', on_delete=models.CASCADE
    )

这避免了导入模块,从而避免了循环导入。如果模型有相同的app_name,你可以参考this by 'ModelName'


推荐阅读