python django 休息框架。如何以某种特定格式序列化外键 UUID?

标签 python django django-rest-framework

我有两个模型 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 序列化为十六进制格式呢?

最佳答案

如果您希望能够指定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')

关于python django 休息框架。如何以某种特定格式序列化外键 UUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53649723/

相关文章:

python - 按标准拆分列表

Python、numpy、einsum 将一叠矩阵相乘

python - Ajax调用不调用Django中的 View 函数

python - 我在settings.py上实现了电子邮件设置,但是当我提交表单时它不起作用

django "manage.py index"不作为 cron 作业执行

django - 操作错误没有这样的列

python - 将变量传递给函数时如何使用python timeit?

python - Django Rest Framework使用url加载指定模型

json - 为 django-rest-framework 中的每个序列化元素添加对象键

python - Django Rest Framework 未从我的数据库检索数据