Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python django rest框架。如何以特定格式序列化外键UUID?_Python_Django_Django Rest Framework - Fatal编程技术网

python django rest框架。如何以特定格式序列化外键UUID?

python django rest框架。如何以特定格式序列化外键UUID?,python,django,django-rest-framework,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

我有两个模型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(主键)更改为十六进制格式。但是键的
格式是默认格式(十六进制详细)。

那么,我如何将模型B中的\u key
外键序列化为十六进制格式呢?

在DRF中跨关系序列化时,您只需要


如果您希望能够为\u键指定
,则不能使用@Withnail的答案,因为\u键的
是只读的。
你应该使用一个


您需要的是:

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

听起来不错,但我用
{“id”:“XXX”,“desc”:“deschere”,“for_key”:a}
中的id将数据发布到B。它不返回任何错误,但是
for_key
列显示为null…它将取决于您发回的内容,十六进制或十六进制详细信息,作为起始位置-很难说没有看到代码/示例。我使用
十六进制
格式将数据发回,我可以在表中看到它;然后我用id和
将数据以
hex
的格式发布到B,以获取密钥。之后,我发布的键的
列是默认的
hex\u verbose
格式。。。。
  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')
class BSerializer(serializers.ModelSerializer):
    id = serializers.UUIDField(format='hex')
    for_key = serializers.UUIDField(format='hex', source='for_key.id')
    class Meta:
      model = B
      fields = ('id', 'desc', 'for_key')