【问题标题】:How to achieve multiple output representations in Django Rest Framework Serializer如何在 Django Rest Framework Serializer 中实现多个输出表示
【发布时间】:2021-02-10 08:48:43
【问题描述】:

我正在尝试将 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 有这样的支持吗?如果不是,那么在考虑嵌套序列化程序的可能性的情况下,推荐的实现方式是什么?

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

    我认为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

    【讨论】:

    • 我的要求更多的是更改传出数据格式的字段名称,并排除某些传出表示的某些字段。这个解决方案并不能完全解决我的问题。
    猜你喜欢
    • 2014-05-25
    • 1970-01-01
    • 2020-03-05
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多