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
时,似乎不会出现这种情况。永远不会被序列化,它只在“内部”可用。