假设我在Django REST中有这个序列化器:
class MySerializer(serializers.ModelSerializer):
age = serializers.SerializerMethodField('get_age')
class Meta:
model = MyModel
fields = ('field1', 'field2', 'age')
def get_age(self, obj):
return obj.age * 100
现在适用于序列化。
但现在我想要它,以便在我反序列化时它会divide the age by 100
。
我该怎么做?
答案 0 :(得分:1)
我相信在这种情况下可能会使用自定义字段。
class AgeField(serializers.WriteableField):
def to_native(self, age):
return age * 100
def from_native(self, age):
return int(age) / 100
class MySerializer(serializers.ModelSerializer):
age = AgeField(source='age')
def restore_object(self, attrs, instance=None):
"""
Deserialize a dictionary of attributes into an object instance.
You should override this method to control how deserialized objects
are instantiated.
"""
if instance is not None:
instance.update(attrs)
instance.update({'age', attrs['age'] / 100})
return instance
return attrs
class Meta:
model = MyModel
fields = ('field1', 'field2', 'age')
在此示例中,我们说年龄为10.在序列化程序中,您将显示以下内容:
[
{
"field1": "value",
"field2": "value",
"age" : 100
},
]
to_native
方法会将值显示为100,就像页面上的表单一样。但是,当提交100作为值时,from_native
将触发(age
为unicode),然后除以100,以10存储到数据库。这是您要查找的内容吗?
或者,如果您正在讨论严格反序列化,restore_object
代码很可能与to_native
结合使用。