0

一意のエントリを保証する関数 (create_unique) を呼び出す変数 inv を持つモデル (models.py の Invitation) があります。

models.py

class Invitation(models.Model):
    inv = models.Charfield(unique=True, default=create_unique)

class OtherModel(models.Model):
    ...

関数 create_unique は、invitations.py にあります。問題は、Invitation や、invitations.py の models.py から別のモデルをインポートしようとするたびに、循環インポートが発生し、どうすれば解決できるのか疑問に思うことです。

問題の解決策は2つしか見つかりませんでした:

# create_unique を notifications.py の外に移動しますが、実際にはそこに属します... # モデルをファイルの先頭ではなく、invitations.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

モデルで、関数の名前を文字列 (default='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