如何避免同一应用程序在Django中导入错误

时间:2019-11-19 16:00:05

标签: python django

我有一个django应用程序,我希望使用Enum选项保存MyModel实例,该实例由save()方法处理,例如:

# app/models.py

from django.db import models
from app.utils import translate_choice
from enum import Enum

class MyEnum(Enum):
  CHOICE_A = 'Choice A'
  CHOICE_B = 'Choice B'

class MyModel(models.Model):
  ...
  choice = models.CharField(
    max_length=10,
    choices=[(tag.name, tag.value) for tag in MyEnum],
  )
  ...
  def save(self, *args, **kwargs):
    self.choice = translate_choice(self.choice)
    super().save(*args, **kwargs)

app/utils.py上,我有:

from app.models import MyEnum

def translate_choice(value):
   ...
   return MyEnum.CHOICE_A # For example

运行应用程序时,我在ImportError: cannot import name 'MyEnum'文件上不断遇到app/utils.py错误。这是由于python循环导入错误引起的,还是我遗漏了其他东西?将translate_choice()方法移至app/models.py时,它停止发生,但是我想在其他模块中使用相同的方法,当在另一个应用程序中使用时,模型中具有转换功能有点奇怪。

提前谢谢

1 个答案:

答案 0 :(得分:0)

您可能已经猜到了,这可能是由于循环导入所致。您可以尝试将import语句放置在使用导入对象的函数中,而不是放在文件的顶部:

def translate_choice(value):
    from app.models import MyEnum
    ...
    return MyEnum.CHOICE_A # For example

诚然,这不是最优雅的解决方案。另请参阅this post的答案,在这里您可以找到其他方法。