我有一个模型(Invitation,在models.py中),变量inv调用一个函数(create_unique)来确保一个唯一的条目:
models.py
class Invitation(models.Model):
inv = models.Charfield(unique=True, default=create_unique)
class OtherModel(models.Model):
...
函数create_unique位于invitations.py中。现在的问题是,每当我尝试从invitations.py中的models.py导入Invitation或其他模型时,我都会得到一个循环导入,我想知道如何解决它。
我只发现了两个问题的解决方案:
在invitations.py之外移动create_unique,但它真的属于那里...... #在invitations.py的函数中导入模型,而不是文件的beginnng。
此解决方案不是最理想的,因为在函数外部可能需要导入(即,对于信号接收器装饰器)。
invitations.py
from models.py import Invitation, OtherModel # this causes a circular import
def create_unique():
unique = 'a unique string'
return unique
def other_function():
# this works but is redundant and limited to the function itself
from models.py import Invitation, OtherModel
我还尝试在模型中将函数的名称指定为字符串(默认='create_unique'),但这显然不起作用。
谢谢!
修改
完整的create_unique函数:
def create_unique(length=30):
i=0
max = 100
while (i<max):
unique = u''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(length))
try:
Invitation.objects.get(invite=unique)
return create_unique()
except Exception:
return unique