django循环导入由Charfield默认值引起

时间:2013-08-12 08:58:40

标签: 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位于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

0 个答案:

没有答案