Django SerializerMethodField can';不要保存小数点
因此,根据文档,SerializerMethodField是一个只读字段 就我而言,这妨碍了我的写作: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() 现在如
# 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”字段?