关于使用to_representation的文档有些简短。此方法由Django Rest Framework 3.0+用来更改数据在应用程序接口中的表示形式。
这里是文档链接:
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)当我执行此代码时,它将返回模型中的所有字段,而不是我上面在class Meta: fields中指定的字段。
是否可以在to_representation方法中引用class Meta: fields?
发布于 2015-08-05 09:16:15
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另外,如果你有兴趣了解它是如何工作的,那么这个魔术实际上在ModelSerializer.to_representation中是不会发生的。事实上,它甚至没有实现该方法。它是在常规Serializer上实现的。Django模型的所有魔力实际上都发生在get_fields中,它调用get_field_names,然后考虑Meta.fields参数……
https://stackoverflow.com/questions/31820389
复制相似问题