首页 > 解决方案 > 如何添加新的序列化器字段以及所有模型字段?

问题描述

在这里,我有一个具有很多领域的模型。所以我想用它__all__来返回所有的字段。但是现在我需要添加新字段image_url,所以我自定义了一个这样的序列化程序,但是现在我需要像这样将所有模型字段放在Metafields=['name','..', 'image_url']中,以便返回image_url.

有没有办法在image_url不指定的情况下返回Meta.fields?我的意思是我不想在中写所有模型字段Meta.fields(因为字段太多)并且还想返回image_url

序列化程序.py

class MySerializer(ModelSerializer):
    image_url = serializers.SerializerMethodField('get_image_url')

    class Meta:
        model = MyModel
        fields = '__all__'
    def get_image_url(self, obj):
        return obj.image.url

标签: pythondjangodjango-rest-framework

解决方案


您可以尝试对 te 序列化程序进行子类化:

class MySerializer(ModelSerializer):

    class Meta:
        model = MyModel
        fields = '__all__'


class MyChildSerializer(MySerializer):

    image_url = serializers.SerializerMethodField()

    class Meta:
        fields = MySerializer.Meta.fields + ['image_url']

    def get_image_url(self, obj):
        return obj.image.url

从来没有尝试过这样的事情,但由于Meta.fields是一个列表,您可以对其执行基本的 python 操作。

附言。如果您使用get_<field_name>getter 模式,则无需在 SerializerMethodField 参数中指定它。


推荐阅读