[英]Django rest framework: De serializing a string to an integer and vice versa
我们正在使用 Django Rest 框架来序列化和反序列化来自第三方 API 的 json 响应。 我需要将字符串字段值转换为我们系统中的数值。
下面给出了 JSON 响应
{
"result": "win" # Other values include "loss"/"inconclusive"/"pending"
}
Django 模型
class Experiment(Model):
RESULTS = (
(1, 'win'),
(2, 'loss'),
(3, 'inconclusive'),
)
inferred_result = models.IntegerField(choices=RESULTS, null=True, blank=True)
Django 序列化器类
class ResultsSeializer(serializers.ModelSerializer):
# Need to convert "result" from "string" to "int" and vice versa.
class Meta:
model = models.Experiment
我想将inferred_result
整数值转换为等效string
,反之亦然。 我可以使用这种方法: Django rest 框架。 如果将整数转换为字符串是个好主意,请将json 字段反序列化为模型上的不同字段。 如何将字符串转换为整数? 我是 django rest api 和 django 的新手。
要显示字符串而不是 int,您可以使用get_FOO_display
模型的属性。 要在创建过程中将字符串转换为 int,您可以像这样覆盖create()
方法:
class ResultsSeializer(serializers.ModelSerializer):
inferred_result = serializers.CharField(source='get_inferred_result_display')
class Meta:
model = models.Experiment
fields = ('inferred_result',)
def create(self, validated_data):
dispplayed = validated_data.pop('get_inferred_result_display')
back_dict = {k:v for v, k in models.Experiment.RESULTS}
res = back_dict[dispplayed]
validated_data.update({'inferred_result': res})
return super(ResultsSeializer, self).create(validated_data)
如果需要,您需要以同样的方式覆盖update()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.