Django Rest Framework partial=True не работает
Я новичок в Django & DRF и у меня очень глупая проблема с моим проектом, в котором он не позволяет мне делать частичное обновление. Я использую общие представления (UpdateAPIView) и я застрял с этим уже 2 недели.
<Надеюсь, что кто-нибудь сможет помочь и заранее благодарю вас.
Модель:
class BusinessPartner(models.Model):
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)
mobile_number = models.CharField(max_length=150, unique=True)
email = models.EmailField(max_length=150, unique=True)
business_name = models.CharField(max_length=255, blank=True)
type_of_business = models.CharField(max_length=150, blank=True)
street_address = models.CharField(max_length=255, blank=True)
city = models.CharField(max_length=150, blank=True)
state_province = models.CharField(max_length=150, blank=True)
postal_zip = models.IntegerField(null=True, blank=True)
services_offered = models.TextField(null=True, blank=True)
account = models.ForeignKey(Account, on_delete=models.CASCADE)
class Meta:
ordering = ["-account"]
def __str__(self):
return self.first_name + " " + self.last_name
Serializer:
class BusinessPartnerSerializer(serializers.ModelSerializer):
class Meta:
model = BusinessPartner
fields = [
"id",
"first_name",
"last_name",
"mobile_number",
"email",
"business_name",
"type_of_business",
"street_address",
"city",
"state_province",
"postal_zip",
"services_offered",
"account",
]
extra_kwargs = {"id": {"read_only": True}}
def update(self, instance, validated_data):
partner = BusinessPartner.objects.get(account=instance)
print("Previous mobile number: ", getattr(partner, "mobile_number"))
print("New mobile number: ", validated_data["mobile_number"])
if getattr(partner, "mobile_number") == validated_data["mobile_number"]:
validated_data.pop("mobile_number")
if getattr(partner, "email") == validated_data["email"]:
validated_data.pop("email")
for (key, value) in validated_data.items():
setattr(partner, key, value)
partner.save()
return partner
Вид:
class UpdatePartnerProfileView(generics.UpdateAPIView):
permission_classes = [IsAuthenticated]
serializer_class = BusinessPartnerSerializer
queryset = BusinessPartner.objects.all()
def update(self, request, *args, **kwargs):
serializer = self.serializer_class(
request.user, data=request.data, partial=True
)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data, status=status.HTTP_200_OK)
return Response(serializer.error, status=status.HTTP_400_BAD_REQUEST)