当我试图将UUID属性传递给url参数时,我收到了这个错误。
urlpatterns = [
url(r'^historia-clinica/(?P<uuid>[W\d\-]+)/$', ClinicHistoryDetail.as_view(), name='...'),
]
views.py
class ClinicHistoryDetail(...):
...
my_object = MyModel.objects.create(...)
...
return redirect(reverse('namespace:name', kwargs={'uuid' : my_object.id}))
model.py
class MyModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
...
有什么建议吗?
7条答案
按热度按时间vc9ivgsu1#
Django上有一个关于这个问题的bug标签,但是python文档中的一个自定义的所谓“复杂编码器”可以帮助你。
如果我们做这样的事情
应该对uuid字段进行编码。
lvjbypge2#
将UUID转换为字符串。
uuid_str = str(uuid_item)
dnph8jn43#
看起来这个错误与django无关,当使用
DjangoJSONEncoder
时。不需要编写自己的自定义编码器。由django提供,处理大多数已知的序列化问题。此处显示详细信息
ca1c2owp4#
要在这样的URL中使用UUID,您应该将其作为字符串传递:
FYI -看起来WIM的答案更全面一些。你的正则表达式应该更严格一些。如果你最终使用slug的字符串表示,你会想要一个如下的正则表达式:
[A-Za-z0-9\-]+
,允许字母数字和连字符。xmjla07d5#
我使用转换函数来实现这个,它简单而干净。
eivnm1vs6#
我在一个数据库模型中遇到了同样的问题,我想打印出来进行调试,我发现
pprint
模块中的pprint()
函数可以处理这个问题,您也可以给它一个indent
参数,以获得与json.dumps()
相同的缩进输出https://docs.python.org/3/library/pprint.html#pprint.pprint
示例:
ijxebb2r7#
另一种方法是使用
default=str
,我将其留作参考:输出: