Django Rest Framework“需要一个有效的整数”。 [英] Django Rest Framework "A valid integer is required."?
本文介绍了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屋!
查看全文