15

デフォルト値が uuid4 の CharField フィールドを持つモデルがあります。

f = models.CharField(default=uuid4, max_length=36, unique=True, blank=True)

これにより、次のエラーが発生します。

モデル 'm' のフィールド 'f' を正常に作成できません: 名前 'UUID' が定義されていません。

移行コマンドを実行しています! この問題を解決するにはどうすればよいですか? これまで私が試した:

  • uuid のモジュールで「ラッパー関数」を定義する (例: def getUUID())
  • Model コンストラクタをオーバーライドして "f" のデフォルト値を設定する

...しかし、問題は残ります:(

ps。カスタムフィールドについて南に指示できることは知っていますが、私の意見ではカスタムフィールドを使用していません:P

4

3 に答える 3

16

モデルのモジュールで次のヘルパー関数を定義することを解決しました:

from uuid import uuid4

def generateUUID():
    return str(uuid4())

それから:

f = models.CharField(default=generateUUID, max_length=36, unique=True, editable=False)

south は、次のような生成された UUID を持つ移行ファイル (migrations.0001_initial) を生成します。

default='5c88ff72-def3-4842-8d48-a75bb3240bb5'

これはかなり不幸です...その文字列は「静的」であるため、代わりにヘルパー関数を使用して動的に作成する必要があります...とにかく、djangoの世界ではalは期待どおりに機能しているようです...データベースにいくつかのレコードを追加し、それぞれに新しい UUID が生成されました。次に、モデルにいくつかのフィールドを追加して最初のスキーマ移行を試みたところ、期待どおりにデータベース テーブルに追加されました。

于 2013-02-23T15:02:58.627 に答える
8

移行で UUID をインポートすることもできます。

from uuid import UUID
于 2014-01-19T18:50:08.243 に答える