如何在我的HyeprlinkedModelSerializer中使用自定义序列化器字段 [英] How to use custom serializers fields in my HyeprlinkedModelSerializer

查看:111
本文介绍了如何在我的HyeprlinkedModelSerializer中使用自定义序列化器字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I need to store bitmap representation of an image in my code, so I did this in my model

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

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

now Django-rest doesn't have a serializer field for BinaryField. If I create my own serializer field for this, how would I be able to use it in my code ? For example, if I create something like

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或在当前映射中声明新值?

How can I plug this mapping of models.BinaryField and MyBinaryField in my serializer. I know there is a default serializer_field_mapping map available and I can override it, but I want to use existing serializer_field_mapping as well. How can I insert my new entry into existing serializer_field_mapping or declare new values in current map ?

推荐答案

只需复制 serializer_field_mapping 从序列化器的基类中获取,并使用新的模型字段-序列化器字段对进行更新。例如,如果您使用 ModelSerializer 子类,则:

Just make a copy of serializer_field_mapping from the base class of your serializer and update it with new "model field - serializer" field pair. For example if you use ModelSerializer subclass then:

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

这篇关于如何在我的HyeprlinkedModelSerializer中使用自定义序列化器字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆