Update api не работает в django rest framework

У меня есть простой api обновления, который не работает должным образом. Я протестировал API в postman, отправив только ключ и данные, которые нужно обновить, но мой фронтенд отправляет все данные формы вместе с данными, которые обновляются. Он работает в postman, когда я отправляю только ключ и данные, которые нужно обновить, но когда я отправляю все данные с определенными полями в виде пустой строки (""), они не обновляются

Мои модели:

class Lead(models.Model):    

    title = models.CharField(max_length=5, choices=TITLES, blank=True)
    first_name = models.CharField(max_length=30)
    middle_name = models.CharField(max_length=30, blank=True)
    last_name = models.CharField(max_length=30)
    address = models.CharField(max_length=100, blank=True)
    city = models.CharField(max_length=50, blank=True)
    state = models.CharField(max_length=50, blank=True)
    country = models.CharField(max_length=30, default="nepal")
    phone = models.CharField(max_length=50, )
    /........other fields................................/

Мои взгляды:

class LeadsView(APIView):
    permission_classes = [AllowAny]    

    def put(self, request, pk=None, *args, **kwargs):
        print("iam put")
        id = pk
        abc = Lead.objects.get(id=id)
        serializer = LeadSerializer(abc,data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response({
                "message": " Leads has been updated",
                "data": serializer.data
            }, status=status.HTTP_200_OK)
        return Response(serializer.data)

Мои сериализаторы:

class LeadSerializer(serializers.ModelSerializer):
    email= serializers.EmailField(required=False)
    phone = serializers.CharField(required=False)
    first_name = serializers.CharField(required=False)
    last_name = serializers.CharField(required=False)
    title = serializers.CharField(required=False)
    address = serializers.CharField(required=False)
    company_name = serializers.CharField(required=False)
    /.................same in other fields............../
    

    class Meta:
        model = Lead
        

        fields = ['id','title','first_name','last_name','address','company_name',
                  'city','state','country','phone','source','mobile',
                  'email','gender','date_created','lead_status']

Здесь на уровне сериализатора я поставил все поля как required = false, но на уровне модели только три поля first_name, last_name и phone являются обязательными, остальные поля могут быть пустыми.

Когда все поля присутствуют, он обновляется, когда некоторые поля пустые, как пустая строка, он не обновляется. Также, когда отправляется только один ключ+данные, он обновляется.

Это связано с тем, что ваш сериализатор не валиден при проверке данных запроса. В этой строке:

if serializer.is_valid():
    pass

изменить на:

if serializer.is_valid(raise_exception=True):
    pass

Вы получите ошибку валидации, подробную информацию о данных запроса.

Вернуться на верх