我需要在我的代码中存储图像的位图表示,所以我在我的模型中做到了这一点
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或在当前地图中声明新值?
答案 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