Python django rest框架-如何为序列化程序添加静态字段值

Python django rest框架-如何为序列化程序添加静态字段值,python,django,django-rest-framework,Python,Django,Django Rest Framework,我需要向序列化程序添加一个静态字段。无论传递的对象是什么,它都应该始终返回相同的值。目前我是这样实现的: class QuestionSerializer(serializers.ModelSerializer): type = serializers.SerializerMethodField() @staticmethod def get_type(obj): return 'question' class Meta: mo

我需要向序列化程序添加一个静态字段。无论传递的对象是什么,它都应该始终返回相同的值。目前我是这样实现的:

class QuestionSerializer(serializers.ModelSerializer):
    type = serializers.SerializerMethodField()

    @staticmethod
    def get_type(obj):
        return 'question'

    class Meta:
        model = Question
        fields = ('type',)

但是,如果没有
SerializerMethodField
,是否有一种更简单的方法来执行此操作?

唯一的替代方法是将
覆盖到_表示
,并在其中添加值:

def to_representation(self, obj):
    data = super().to_representation(obj)
    data['type'] = 'question'
    return data

不过,这不是一个更好的选择。

如果您不想在模型中添加行,那么在模型中添加静态字段会更容易

class Question(models.Model):
    type = 'question'

class QuestionSerializer(serializers.ModelSerializer):

    class Meta:
        model = Question
        fields = ('type',)

您可以使用
序列化程序。HiddenField

class QuestionSerializer(serializers.ModelSerializer):
type = serializers.HiddenField(default='question')

class Meta:
    model = Question
    fields = ('type',)

使用ReadOnlyField对我来说很有用:

class QuestionSerializer(serializers.ModelSerializer):
    type = serializers.ReadOnlyField(default='question')

    class Meta:
        model = Question
        fields = ('type',)

我认为这是正确的方法。我不知道有什么更好的方法。当序列化出
HiddenField
时,似乎不会出现这种情况。永远不会被序列化,它只在“内部”可用。