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