由Charfield默认值导致的django循环导入
我有一个模型(Invitation,在models.py中),其中一个变量inv调用一个函数(create_unique),该函数确保一个唯一的条目: models.py由Charfield默认值导致的django循环导入,django,django-models,Django,Django Models,我有一个模型(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函数位于investment
class Invitation(models.Model):
inv = models.Charfield(unique=True, default=create_unique)
class OtherModel(models.Model):
...
create_unique函数位于investments.py中。现在的问题是,每次我尝试导入邀请函,或者从invitations.py中的models.py导入另一个模型时,我都会得到一个循环导入,我想知道如何解决它
我只找到了两种解决问题的方法:
#移动到create_unique outsides.py,但它确实属于那里。。。
#导入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
在模型中,我还尝试将函数名指定为字符串(default='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
def create_unique(长度=30):
i=0
最大值=100
虽然(我能不能请你具体说明一下create_unique函数实际需要做什么?我猜这个例子并不是完整的代码,虽然我能想出几种方法来创建唯一的字符串,但我不知道你要做什么,所以我不知道它们是否相关create_unique创建唯一的字符串,请致电邀请函查看是否相关。)是否真的唯一,并返回它(下面的完整代码)。此函数起作用,但问题来自循环导入…def create_unique(长度=30):i=0 max=100 while(i添加了损坏的create_unique,检查是否正确缩进。能否将您在邀请函和模型中执行的所有导入添加到OP中?此外,stacktrace将帮助您找出错误所在。Python没有错,您在某处有一个循环导入。另外:return create_unique()
返回一个递归调用…你确定你的错误不是无限循环吗?我不知道为什么,但终端没有像往常一样打印任何堆栈跟踪,它只打印“myconfig…$python manage.py test mymodule importorror:无法导入名称邀请”,没有其他信息。。。