0

我有一个模型(邀请,在 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
4

0 回答 0