Как отправить ноль для Integerfield из формы в DRF - PullRequest
0 голосов
/ 17 января 2019

У меня есть простая модель:

class TestRentalObject(models.Model):
some_field = models.TextField()

build_year = models.PositiveSmallIntegerField(
    blank=True,
    null=True,
    validators=[MinValueValidator(1300), MaxValueValidator(2100)],
)

с ModelSerializer:

class TestRentObjectSerializer(serializers.ModelSerializer):
class Meta:
    model = TestRentalObject

    fields = (
        "some_field",
        "build_year"
    )

А вот поле ввода из формы:

<input type="number" class="input-group__input input-group__input_no-require is-invalid" id="field-rent.build_year" placeholder="" name="rent.build_year">

Когда я оставляю это поле пустым, сериализатор видит его как недействительный.

In [8]: data = {'some_field': 'some_text', 'build_year': ''}
In [9]: rs = TestRentObjectSerializer(data=data)
In [10]: rs.is_valid()
Out[10]: False
In [11]: rs.errors
Out[11]: {'build_year': [ErrorDetail(string='A valid integer is required.', code='invalid')]}

Я считаю, что проблема в том, что я получаю build_year как пустую строку, а не None. Но как это сделать правильно?

1 Ответ

0 голосов
/ 17 января 2019

Как рекомендовал NeErAj KuMaR в комментариях, я добавил несколько строк в свой метод просмотра.

    if request.data["rent"].get("build_year") == "":
        del request.data["rent"]["build_year"]

    serializer = TestRentObjectSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)

Это выглядит немного неоднородно, но я не нашел лучшего способа сделать это.

...