由Charfield默认值导致的django循环导入

由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

我有一个模型(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函数位于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:无法导入名称邀请”,没有其他信息。。。