のいずれかを返します。これは常にUUIDインスタンスを返す1.9でジャンゴ1.10 UUIDFieldは、私は、DjangoのネイティブUUIDFieldで奇妙な問題が発生した文字列またはUUID
username = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
:
は、我々は次のように私たちのカスタム・ユーザー・モデルにこのUUIDFieldを使用しています。 1.10では、新しいモデルインスタンスを作成するときに文字列を返します。
は、以下の試験例の比較:
1.9.13
>>> u = User.objects.last()
>>> u2 = UserFactory()
>>> u3 = User.objects.create()
>>> u.pk
UUID('e7e0f87d-1ed4-4293-829f-b0b745ccd676')
>>> u2.pk
UUID('f8e9a4a9-2265-4cd7-9813-00ffe7fd922a')
>>> u3.pk
UUID('0cb736d7-f8a0-4057-9c89-44fa114f4f82')
1.10.7
>>> u = User.objects.last()
>>> u2 = UserFactory()
>>> u3 = User.objects.create()
>>> u.pk
UUID('e7e0f87d-1ed4-4293-829f-b0b745ccd676')
>>> u2.pk
'f8e9a4a9-2265-4cd7-9813-00ffe7fd922a'
>>> u3.pk
'0cb736d7-f8a0-4057-9c89-44fa114f4f82'
この差は、様々なユニットテストの問題を提供します。私は、文字列の両方を強制することによってそれを回避することができますが、私はUUIDFieldはそれが一貫性のない感じのようにそれがないように動作理由を理解したいです。
すべてのケースでは、デフォルト( 'uuid.uuid4')に依存している、' User'を作成しますか?または時にはそれを手動で与えているのですか? – itzMEonTV
@itzmeontv 1.9.13と1.10.7の両方に記載されているステートメントは正確です。どちらの場合も、uuid.uuid4を呼び出し可能なUUIDFIeldのデフォルト値を使用します。 –