如何在我的HyeprlinkedModelSerializer

时间:2015-07-24 10:54:57

标签: django serialization django-rest-framework

我需要在我的代码中存储图像的位图表示,所以我在我的模型中做到了这一点

logo = models.BinaryField(blank=True, null=True)

现在Django-rest没有BinaryField的序列化器字段。如果我为此创建自己的序列化器字段,我将如何在我的代码中使用它? 例如,如果我创建类似

的东西
class MyBinaryField(serializers.Field):
    def to_representation(self, obj):
        return base64.b64decode(obj)
    def to_internal_value(self, data):
        return base64.encodestring(data)

如何在我的序列化程序中插入models.BinaryField和MyBinaryField的映射。我知道有一个默认的serializer_field_mapping地图可用,我可以覆盖它,但我也想使用现有的serializer_field_mapping。如何将新条目插入现有的serializer_field_mapping或在当前地图中声明新值?

2 个答案:

答案 0 :(得分:1)

只需从序列化程序的基类中复制serializer_field_mapping,然后使用新的"模型字段 - 序列化程序"进行更新。场对。例如,如果您使用ModelSerializer子类,则:

from rest_framework import serializers
class MySerializer(serializers.ModelSerializer):
    serializer_field_mapping = (
        serializers.ModelSerializer.serializer_field_mapping.copy()
    )
    serializer_field_mapping[models.BinaryField] = MyBinaryField

答案 1 :(得分:0)

一种方法,

class MySerializer(serializers.Serializer):
    logo = MyBinaryField()

但是,我想您要询问覆盖模型序列化器字段,然后您可以使用以下内容,

class AccountSerializer(serializers.ModelSerializer):
    logo = MyBinaryField(read_only=True)

    class Meta:
        model = Account

Reference from Docs