首页 > 解决方案 > python django 休息框架。如何以某种特定格式序列化外键 UUID?

问题描述

我有两个模型 A 和 B,它们都有 UUID 作为主键。有一个B与 相关的外键A

class A(models.Model):
    id = models.UUIDField(primary_key=True, editable=False)
    desc = models.CharField(max_length=128, null=True)

class B(models.Model):
    id = models.UUIDField(primary_key=True, editable=False)
    desc = models.CharField(max_length=128, null=True)
    for_key = models.ForeignKey(A, on_delete=models.SET_NULL, null=True)

我的序列化程序来了,

class ASerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(format='hex')
    class Meta:
        model = A
        fields = ('id', 'desc')

class BSerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(format='hex')
    class Meta:
        model = B
        fields = ('id', 'desc', 'for_key')

如您所见,我已将 uuid(主键)更改为十六进制格式。但是 的格式for_key是默认格式(hex_verbose)。那么如何将模型 B 中的外键序列化为 十六进制格式呢?for_key

标签: pythondjangodjango-rest-framework

解决方案


如果您希望能够指定,for_key那么您不能使用@Withnail 的答案,因为for_key存在只读。您应该使用PrimaryKeyRelatedField

  class BSerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(format='hex')
    for_key = serializers.PrimaryKeyRelatedField(queryset=A.objects.all())

    class Meta:
        model = B
        fields = ('id', 'desc', 'for_key')

推荐阅读