首页 > 解决方案 > 如何在 Django Rest Framework 中仅使用 1 个字段来展平序列化数据

问题描述

我有以下序列化程序:

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ("username", "profile_picture")

class SomeSerializer(serializers.ModelSerializer):
    some_user = UserSerializer()

    class Meta:
        model = UserFollowing
        fields = ("some_user",)

以及与之关联的模型UserFollowing

class UserFollowing(models.Model):
    some_user = models.ForeignKey(User, on_delete=models.CASCADE)

序列化程序返回如下内容:

[
    {
        "some_user": {
            "username": "jane",
            "profile_picture": "/media/picture.jpg"
        }
    },
    ...
]

为了一致性和简单性,我想返回:

[
    {
        "username": "jane",
        "profile_picture": "/media/picture.jpg"
    },
    ...
]

我怎样才能做到这一点?

标签: djangodjango-rest-frameworkdjango-serializer

解决方案


您可以使用serializerMethodField

class SomeSerializer(serializers.ModelSerializer):
    username = serializers.SerializerMethodField()
    profile_picture = serializers.SerializeMethodField()

    def get_username(self, obj):
        return obj.some_user.username
    
    def get_profile_picture(self, obj):
        return obj.some_user.profile_picture

    class Meta:
        model = UserFollowing
        fields = ("username", "profile_picture")

推荐阅读