如何在 Django Rest Framework 中仅使用 1 个字段展平序列化数据

How to flatten serialized data with only 1 field in Django Rest Framework

我有以下序列化程序:

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)

序列化程序 return 是这样的:

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

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

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

我怎样才能做到这一点?

您可以使用 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")