django 1.10 uuidfield返回字符串或uuid



从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的行为是不一致的。

问题是由Django的AbstractBaseuser类中的行为改变引起的。该课程收到了我打电话给保存的干净方法。在新的清洁方法中,指调用formarize_username方法,该方法迫使用户名为文本。

通过避免对AbstractBaseuser的超级呼叫,我们不再使用户名正常化,这无论如何我们都不想要,因为我们的用户名字段是UUID。

相关内容

  • 没有找到相关文章

最新更新