我有一个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
时,它停止发生,但是我想在其他模块中使用相同的方法,当在另一个应用程序中使用时,模型中具有转换功能有点奇怪。
提前谢谢
答案 0 :(得分:0)
您可能已经猜到了,这可能是由于循环导入所致。您可以尝试将import语句放置在使用导入对象的函数中,而不是放在文件的顶部:
def translate_choice(value):
from app.models import MyEnum
...
return MyEnum.CHOICE_A # For example
诚然,这不是最优雅的解决方案。另请参阅this post的答案,在这里您可以找到其他方法。