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
Вы получите ошибку валидации, подробную информацию о данных запроса.