首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将None传递给DRF序列化字段的to_representation

将None传递给DRF序列化字段的to_representation
EN

Stack Overflow用户
提问于 2017-09-13 15:11:00
回答 2查看 1.9K关注 0票数 2

我有以下SerializerField:

代码语言:javascript
复制
class TimestampField(Field):
    def to_representation(self, value):
        if not value:
            return ''

        return value.timestamp()

我在我的序列化程序中这样使用它:

代码语言:javascript
复制
class ArticlePhotobookSerializer(ModelSerializer):  
    delivery_date_from = TimestampField()
    delivery_date_to = TimestampField()

现在,getter delivery_date_to可以返回None,我希望使用to_representation方法将其转换为空字符串。但是,当我使用序列化程序解析这个None值时,它甚至没有输入to_representation方法并立即返回None。我应该更改什么以同时使用to_representation for None的方法

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-13 16:15:24

默认情况下,序列化程序的to_representation方法跳过无值字段(参见来源)。

您可以编写混合类来覆盖默认的to_representation

代码语言:javascript
复制
class ToReprMixin(object):  
    def to_representation(self, instance):
        ret = OrderedDict()
        fields = [field for field in self.fields.values() if not field.write_only]

        for field in fields:
            try:
                attribute = field.get_attribute(instance)
            except SkipField:
                continue

            ret[field.field_name] = field.to_representation(attribute)

        return ret

并在序列化程序中使用:

代码语言:javascript
复制
class ArticlePhotobookSerializer(ToReprMixin, ModelSerializer):  
    ...
票数 6
EN

Stack Overflow用户

发布于 2022-10-24 10:40:27

如果您想在没有实例(与您的问题不完全相同,但匹配问题标题)时更改to_representation的结果,那么to_representation甚至不会在DRF v3中被调用。可以通过子类get_initial方法来更改结果:

代码语言:javascript
复制
    def get_initial(self):
        """
        Return a value to use when the field is being returned as a primitive
        value, without any object instance.
        """
        if callable(self.initial):
            return self.initial()
        return self.initial

以下是一个例子:

代码语言:javascript
复制
    def get_initial(self) -> dict:
        return {'display_name': 'moocows'}

在这里,我们使用上下文作为初始表示:

代码语言:javascript
复制
    def get_initial(self) -> dict:
        return self.context
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46201067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档