Django Rest Framework возвращает: "требуется действительное целое число".

Я создал форму react, используя django с фреймворком rest в фоновом режиме. Если я оставляю поле integer пустым во время отправки формы, я получаю следующую ошибку от rest api:

"a valid integer is required"

Проблема в том, что это поле не является обязательным для заполнения пользователем, и использование значения по умолчанию 0 также не работает, поскольку некоторые люди будут вводить число, а затем передумают и снова опустошат поле. Поэтому я пытаюсь сделать так, чтобы при пустом поле форма отправляла null вместо пустой строки. Я должен упомянуть, что я использую formik для создания своих форм.

models.py

PriceRangeMax = models.IntegerField(null=True, blank=True)

FacilityUpdate.py

                            <Field name="PriceRangeMin">
                                {({ field, form }) => (
                                    <label className="mt-3 block">
                                        <span className="text-gray-700">Price Range</span><br></br>
                                        <input
                                        {...field}
                                        type="number"
                                        className="mt-2"
                                        style={
                                            form.touched.PriceRangeMin && form.errors.PriceRangeMin ? (
                                                { border: '2px solid var(--primary-red)'}
                                            ) : null
                                        }
                                        />
                                    </label>
                                )}
                            </Field>

serializers.py

class FacilitySerializer(serializers.ModelSerializer):
    is_owner = serializers.SerializerMethodField()
    class Meta:
        model = Facility
        fields = (
            "id",
            "Name",
            "FacilityDescription",
            "ListingVerified",
            "mainimage",
            "AdministratorCell",
            "FeaturedVideo",
            "PriceRangeMin",
            "PriceRangeMax",
            "is_owner",
        )
        read_only_fields = ("id", "ListingVerified", "user")

    def get_is_owner(self, obj):
        user = self.context["request"].user
        return obj.user == user

views.py

from django.conf import settings
from django.core.mail import send_mail
from django.views.decorators.csrf import csrf_exempt
from rest_framework.generics import (
    ListAPIView,
    RetrieveAPIView,
    UpdateAPIView,
)
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.decorators import action
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, UpdateModelMixin
from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet

from users.models import Facility
from rest_framework.permissions import AllowAny, IsAuthenticated

from .permissions import IsFacilityOwner
from .serializers import FacilitySerializer, UserSerializer

from django.contrib.auth import get_user_model


class FacilityUpdateView(UpdateAPIView):
    permission_classes = [IsAuthenticated, IsFacilityOwner]
    serializer_class = FacilitySerializer

    def get_queryset(self):
        return Facility.objects.all()

Не забудьте использовать python manage.py makemigrations && python manage.py migrate

и обновите ваш сериализатор, как показано ниже



class FacilitySerializer(serializers.ModelSerializer):
    is_owner = serializers.SerializerMethodField()
    class Meta:
        model = Facility
        fields = (
            "id",
            "Name",
            "FacilityDescription",
            "ListingVerified",
            "mainimage",
            "AdministratorCell",
            "FeaturedVideo",
            "PriceRangeMin",
            "PriceRangeMax",
            "is_owner",
        )
        read_only_fields = ("id", "ListingVerified", "user")

    extra_kwargs = {
        "PriceRangeMax": {"required": False}
    }

    def get_is_owner(self, obj):
        user = self.context["request"].user
        return obj.user == user
    
Вернуться на верх