pythondjangouuid

UUID('...') is not JSON serializable


I get this error when i try to pass the UUID attribute to url parameter.

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)
    ...

Any suggestions?


Solution

  • There is a bug ticket on Django regarding this issue however a custom so called 'complex encoder' by python docs can help you.

    import json
    from uuid import UUID
    
    
    class UUIDEncoder(json.JSONEncoder):
        def default(self, obj):
            if isinstance(obj, UUID):
                # if the obj is uuid, we simply return the value of uuid
                return obj.hex
            return json.JSONEncoder.default(self, obj)
    

    Now if we did something like this

    json.dumps(my_object, cls=UUIDEncoder)
    

    Your uuid field should be encoded.