Features: 1) Add address_line_1 and address_line_2 fields to Address serializer; 2) Include detailed traceback information in error responses when DEBUG is enabled.

Fixes: 1) Correct mismanagement of instance and serializer in update method of viewset.

Extra: 1) Minor organizational improvement and clearer formatting in views.
This commit is contained in:
Egor Pavlovich Gorbunov 2025-05-29 18:08:44 +03:00
parent 7520184e56
commit 7e40596cb3
2 changed files with 13 additions and 3 deletions

View file

@ -171,7 +171,11 @@ class AddressCreateSerializer(ModelSerializer): # noqa: F405
class Meta: class Meta:
model = Address model = Address
fields = ["raw_data"] fields = [
"raw_data",
"address_line_1",
"address_line_2"
]
def create(self, validated_data): def create(self, validated_data):
raw = validated_data.pop("raw_data") raw = validated_data.pop("raw_data")

View file

@ -86,7 +86,10 @@ class UserViewSet(
return Response({"message": _("password reset successfully")}, status=status.HTTP_200_OK) return Response({"message": _("password reset successfully")}, status=status.HTTP_200_OK)
except (TypeError, ValueError, OverflowError, User.DoesNotExist) as e: except (TypeError, ValueError, OverflowError, User.DoesNotExist) as e:
return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST) data = {"error": str(e)}
if DEBUG:
data["detail"] = str(traceback.format_exc())
return Response(data, status=status.HTTP_400_BAD_REQUEST)
@method_decorator(ratelimit(key="ip", rate="3/h" if not DEBUG else "888/h")) @method_decorator(ratelimit(key="ip", rate="3/h" if not DEBUG else "888/h"))
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
@ -142,6 +145,9 @@ class UserViewSet(
return Response(serializer.data) return Response(serializer.data)
def update(self, request, pk=None, *args, **kwargs): def update(self, request, pk=None, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
instance = serializer.update(instance=self.get_object(), validated_data=request.data)
return Response( return Response(
self.get_serializer(self.get_object()).update(instance=self.get_object(), validated_data=request.data).data self.get_serializer(instance.data)
) )