首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Rest Framework中的to_representation()可以访问普通字段吗

Django Rest Framework中的to_representation()可以访问普通字段吗
EN

Stack Overflow用户
提问于 2015-08-05 06:22:32
回答 1查看 31.7K关注 0票数 28

关于使用to_representation的文档有些简短。此方法由Django Rest Framework 3.0+用来更改数据在应用程序接口中的表示形式。

这里是文档链接:

http://www.django-rest-framework.org/api-guide/serializers/#overriding-serialization-and-deserialization-behavior

下面是我当前的代码:

代码语言:javascript
复制
from django.forms.models import model_to_dict

class PersonListSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person
        fields = ('foo', 'bar',)

    def to_representation(self, instance):
        return model_to_dict(instance)

当我执行此代码时,它将返回模型中的所有字段,而不是我上面在class Meta: fields中指定的字段。

是否可以在to_representation方法中引用class Meta: fields

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-05 09:16:15

DRF的ModelSerializer已经具备了处理该问题的所有逻辑。在您的情况下,甚至不需要自定义to_representation。如果您需要对其进行自定义,我建议您先调用super,然后再自定义输出:

代码语言:javascript
复制
class PersonListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('foo', 'bar',)

    def to_representation(self, instance):
        data = super(PersonListSerializer, self).to_representation(instance)
        data.update(...)
        return data

另外,如果你有兴趣了解它是如何工作的,那么这个魔术实际上在ModelSerializer.to_representation中是不会发生的。事实上,它甚至没有实现该方法。它是在常规Serializer上实现的。Django模型的所有魔力实际上都发生在get_fields中,它调用get_field_names,然后考虑Meta.fields参数……

票数 64
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31820389

复制
相关文章

相似问题

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