Django Rest Framework“需要一个有效的整数”。 [英] Django Rest Framework "A valid integer is required."?

查看:142
本文介绍了Django Rest Framework“需要一个有效的整数”。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在反序列化期间将一个空字符串默认为0或null。

I want to default an empty string to a 0 or null during deserialization.

JSON

{
  'injuries': '6',
  'children': '2',
  'civilians': '',
}

但是,我一直收到此错误:

However, I keep getting this error:


需要一个有效的整数。

"A valid integer is required."

models.py

models.py

from django.db import models    

class Strike(models.Model):
    location = models.ForeignKey('Location', on_delete=models.CASCADE)
    civilians = models.PositiveIntegerField(blank=True, null=True)
    injuries = models.PositiveIntegerField(blank=True, null=True)
    children = models.PositiveIntegerField(blank=True, null=True)

serializers.py

serializers.py

from rest_framework import serializers
from .models import Strike


class StrikeSerializer(serializers.ModelSerializer):
    civilians = serializers.IntegerField(default=0, required=False)

    class Meta:
        model = Strike
        fields = '__all__'

    def create(self, validated_data):
        return Strike.objects.create(**validated_data)

main

serializer = StrikeSerializer(data=strike)

我尝试操作数据创建方法中,但在此之前会引发错误。我可以在DRF结构中的哪个位置覆盖它,特别是将''转换为0或无?

I tried manipulating data in create method, but the error gets raised before that. Where in the DRF structure can I override this, specifically convert '' to 0 or None?

推荐答案

您可以使用 CharField ,然后在验证方法中将其转换为 int

You can use a CharField and then convert to int in the validation method.

class StrikeSerializer(serializers.ModelSerializer):
    civilians = serializers.CharField(
            required=False, allow_null=True, allow_blank=True)

    def validate_civilians(self, value):
        if not value:
            return 0
        try:
            return int(value)
        except ValueError:
            raise serializers.ValidationError('You must supply an integer')

这篇关于Django Rest Framework“需要一个有效的整数”。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆