Django SerializerMethodField can';不要保存小数点

Django SerializerMethodField can';不要保存小数点,django,django-rest-framework,Django,Django Rest Framework,因此,根据文档,SerializerMethodField是一个只读字段 就我而言,这妨碍了我的写作: # old value is 2.5 data={'score': 1.7} serializer = ScoreTraitSerializer( score_trait, data=data, partial=True) if serializer.is_valid(): new_score_trait = serializer.save() 现在如

因此,根据文档,SerializerMethodField是一个只读字段

就我而言,这妨碍了我的写作:

# old value is 2.5
data={'score': 1.7}
serializer = ScoreTraitSerializer(
        score_trait, data=data, partial=True)
    if serializer.is_valid():
        new_score_trait = serializer.save()
现在如果我检查
new\u score\u trait
,我的分数仍然是
2.5

序列化程序的外观如下所示:

score = serializers.SerializerMethodField()

def get_score(self, obj):
    if isinstance(obj.score, decimal.Decimal):
        return float(obj.score)
    else:
        return obj.score
如果我注释掉我的
SerializerMethodField
,我可以保存新的十进制值(但不能序列化它)

所以。。。我是否正确使用序列化程序?为什么我对序列化程序的写入会点击
SerializerMethodField


提前感谢

SerializerMethodField
是只读字段。仅用于
to_表示
,用于
列表/检索
而不是
创建/更新

序列化程序字段分数必须与模型字段分数冲突,请尝试将其更改为:

float_score = serializers.SerializerMethodField(required=False)

def get_float_score (self, obj):
    if isinstance(obj.score, decimal.Decimal):
        return float(obj.score)
    else:
        return obj.score

查看源代码,您将知道原因:

class SerializerMethodField(Field):
    """
    A read-only field that get its representation from calling a method on the
    parent serializer class. The method called will be of the form
    "get_{field_name}", and should take a single argument, which is the
    object being serialized.

    For example:

    class ExampleSerializer(self):
        extra_info = SerializerMethodField()

        def get_extra_info(self, obj):
            return ...  # Calculate some data to return.
    """
    def __init__(self, method_name=None, **kwargs):
        self.method_name = method_name
        kwargs['source'] = '*'
        kwargs['read_only'] = True
        super(SerializerMethodField, self).__init__(**kwargs)

所以序列化程序将检索“float_score”字段,但我将保存原始的“score”字段?