Django REST "Требуется действительное целое число" при обновлении null = True IntegerField - PullRequest
0 голосов
/ 13 июня 2018

Я следовал Django Rest Framework «Требуется действительное целое число.»? для настройки SpiderSerializer, но, кажется, не работает, все еще получая {"min_word_count":["A valid integer is required."]}

Request Payload {..., min_word_count:""}

class Spider(models.Model):
    ...
    min_word_count = models.PositiveIntegerField(
        default=100,
        null=True,
        blank=True,
    )


class SpiderSerializer(serializers.ModelSerializer):
    min_word_count = serializers.IntegerField(default='', required=False)

    class Meta:
        model = Spider
        exclude = ('category',)


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

1 Ответ

0 голосов
/ 13 июня 2018

min_word_count:"" - пустая строка и, следовательно, недопустимое число.Вы можете иметь min_word_count: None и добавить allow_null=True к объявлению поля.

In [7]: class SpiderSerializer(serializers.Serializer):
   ...:     min_word_count = serializers.IntegerField(default='', required=False)
   ...:     

In [8]: s = SpiderSerializer(data={})

In [9]: s.is_valid()
Out[9]: True

In [10]: s = SpiderSerializer(data={'min_word_count': None})

In [11]: s.is_valid()
Out[11]: False

In [12]: s.errors
Out[12]: 
ReturnDict([('min_word_count',
             [ErrorDetail(string='This field may not be null.', code='null')])])

In [13]: s = SpiderSerializer(data={'min_word_count': ""})

In [14]: s.is_valid()
Out[14]: False

In [15]: s.errors
Out[15]: 
ReturnDict([('min_word_count',
             [ErrorDetail(string='A valid integer is required.', code='invalid')])])
...