可以在Django Rest Framework中的to_representation()访​​问正常字段

Aar*_*ier 14 python django django-rest-framework

关于使用的文档to_representation有点短.此方法用于Django Rest Framework 3.0+更改API中数据的表示形式.

这里是文档链接:

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

这是我目前的代码:

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)
Run Code Online (Sandbox Code Playgroud)

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

是否可以class Meta: fieldsto_representation方法中引用?

mik*_*725 33

DRF ModelSerializer已经具备了解决这个问题的所有逻辑.在您的情况下,您甚至不需要自定义to_representation.如果你需要自定义它,我建议先调用super然后自定义输出:

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
Run Code Online (Sandbox Code Playgroud)

PS如果你有兴趣知道它是如何工作的,那么魔法实际上并不会发生ModelSerializer.to_representation.事实上,它甚至没有实现这种方法.它定期实施Serializer.Django模型的所有魔法实际上都发生在get_fields哪些调用get_field_names然后考虑Meta.fields参数...