如何编码UUID以使其可以序列化JSON

时间:2014-12-30 22:56:14

标签: django-rest-framework

我使用的是UUID而不是默认的Django增量ID。但是,现在我收到以下错误:

file "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py",
line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable") TypeError: UUID('4fd5a26b452b4f62991d76488c71a554') is not JSON serializable

这是我的序列化文件:

class ApplicationSerializer(serializers.ModelSerializer):

    class Meta:
        model = Application
        fields = ("id", "created_at", "merchant_uri", "api_key",
                  "status", 'owner_email', 'business_type', 'full_name',
                  'owner_phone_number', 'marketplace_name', 'domain_url',
                  'support_email', 'support_phone_number', 'postal_code',
                  'street_address', 'current_processor',
                  'current_monthly_volume')

2 个答案:

答案 0 :(得分:2)

这通常意味着您需要强制将UUID序列化为字符串,这可以使用CharField来完成。 Django will do this by default的一些UUID字段实现,但看起来好像您正在使用的那个将返回原始UUID对象。通过将字段设置为CharField,这将强制将其转换为字符串。

class ApplicationSerializer(serializers.ModelSerializer):
    id = serializers.CharField(read_only=True)

    class Meta:
        model = Application
        fields = ("id", "created_at", "merchant_uri", "api_key",
                  "status", 'owner_email', 'business_type', 'full_name',
                  'owner_phone_number', 'marketplace_name', 'domain_url',
                  'support_email', 'support_phone_number', 'postal_code',
                  'street_address', 'current_processor',
                  'current_monthly_volume')

这会手动将其转换为字符串,并为您提供您期望的输出。

答案 1 :(得分:0)

您可以使用django-uuidfield,它会自动序列化。