Django Rest Framework"需要一个有效的整数."?

Saš*_*aba 5 python django django-rest-framework

我希望在反序列化期间将空字符串默认为0或null.

JSON

{
  'injuries': '6',
  'children': '2',
  'civilians': '',
}
Run Code Online (Sandbox Code Playgroud)

但是,我不断收到此错误:

"需要一个有效的整数."

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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

主要

serializer = StrikeSerializer(data=strike)
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*man 10

您可以使用StringField,然后在验证方法中转换为整数.

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')
Run Code Online (Sandbox Code Playgroud)