繁体   English   中英

Django rest 框架:将字符串反序列化为整数,反之亦然

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM