繁体   English   中英

Django Rest Framework中的to_representation()能否访问正常字段

[英]Can to_representation() in Django Rest Framework access the normal fields

使用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)

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

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

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

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

def to_representation(self, instance):
    data = super(ResultLogSerializer, self).to_representation(instance)
    data['username'] = instance.job_result.user.username
    data['status'] = instance.job_result.status
    data['created'] = instance.job_result.created
    data['completed'] = instance.job_result.completed
    return data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM