繁体   English   中英

如何在 Django Rest Framework Serializer 中实现多个输出表示

[英]How to achieve multiple output representations in Django Rest Framework Serializer

我正在尝试将 Django Rest Framework(DRF) 的序列化程序与带有一些 PostgreSQL 字段的 Djnago 模型一起使用。 我知道通过覆盖序列化程序的to_representation()方法,可以更改传出(序列化)数据格式。 有没有办法在 DRF 序列化器中拥有多个传出表示? 例如,我试图实现的目标是这样的。

from rest_framework import serializers

class MySerializer(serializers.Serializer):
    first_name = serializers.CharField(max_length=20)
    last_name = serializers.CharField(max_length=20)
    
    def to_representation_1(self, instance):
        return {
            'first_name': instance.first_name,
            'last_name': instance.last_name
        }
    
    def to_representation_2(self, instance):
        return {
            'firstName': instance.first_name,
            'lastName': instance.last_name
        }
    
    def to_representation_2(self, instance):
        return {
            'name': f'{instance.first_name} {instance.last_name}',
            
        }

DRF 中有这样的支持吗? 如果不是,那么在记住嵌套序列化程序的可能性的情况下,推荐的方法是什么?

我认为rest_framework.serializers.SerializerMethodField可以解决您的问题。

您可以像下面那样使用它。

from django.contrib.auth.models import User
from django.utils.timezone import now
from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    days_since_joined = serializers.SerializerMethodField()
    
    class Meta:
        model = User
    
    def get_days_since_joined(self, obj):
        return (now() - obj.date_joined).days

见: https : //www.django-rest-framework.org/api-guide/fields/#serializermethodfield

暂无
暂无

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

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