我有一个模型(邀请,在 models.py 中),其中一个变量 inv 调用一个函数(create_unique),以确保一个唯一的条目:
模型.py
class Invitation(models.Model):
inv = models.Charfield(unique=True, default=create_unique)
class OtherModel(models.Model):
...
create_unique 函数位于invitation.py 中。现在的问题是,每次我尝试从invitations.py 中的models.py 导入邀请或另一个模型时,我都会得到一个循环导入,我想知道如何解决它。
我只找到了两个解决问题的方法:
# 将create_unique 移到invitation.py 之外,但它确实属于那里... # 在invitation.py 的函数中导入模型,而不是文件的开头。
这个解决方案不是最理想的,因为函数外部可能需要导入(即,对于信号接收器装饰器)。
邀请函.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