簡體   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