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