当我从Django 1.9.13升级到Django 1.10.7时,我遇到了一个与Django本机UUIDField相关的奇怪问题。
我们在自定义用户模型中使用这个UUIDField:
username = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
在1.9版本中,它总是返回UUID实例。
在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
)?还是有时手动输入? - itzMEonTV