Я считаю, что пользовательское поле может быть полезным в этом случае.
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
(с , являющимся юникодом), а затем делиться на 100, сохраняя в базе данных как 10. Это то, что вы ищете?
Или, если вы говорите о строго десериализации, код restore_object
, скорее всего, то, что вы ищете в сочетании с to_native
.
Эта работа: http://stackoverflow.com/questions/19373766/django-rest-framework-custom-serialize-a-field? –
@SimeonVisser Это то, что у меня уже есть. Это работает для запросов GET, где я сериализуюсь. но во время десериализации, как это сделает reverese – user3214546