【问题标题】:ImportError: cannot import name 'Maca' from partially initialized module 'maca.models' (most likely due to a circular import)ImportError:无法从部分初始化的模块“maca.models”导入名称“Maca”(很可能是由于循环导入)
【发布时间】:2021-11-28 23:27:04
【问题描述】:

我有这个错误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)

你能帮我处理一下吗?

【问题讨论】:

标签: python django web


【解决方案1】:

您可以在maca_has_maca2 属性中导入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,您可以使用结构为'<i>app_name</i>.<i>ModelName</i>' 的字符串文字来引用模型,例如:

# no import of maca2.models

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

这避免了导入模块和循环导入。如果模型有相同的app_name,可以通过'ModelName'引用。

【讨论】:

  • 应该也注意到ForeignKeys 可以使用字符串引用模型标签。
  • @AKX:是的,更新了答案。谢谢!
猜你喜欢
  • 2021-02-24
  • 2022-06-22
  • 2022-01-08
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-12
  • 2021-09-22
相关资源
最近更新 更多