From 36da1d5cd25477135cc76957690265846d798b7f Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Wed, 19 Apr 2023 18:57:52 -0400 Subject: [PATCH] Unified the getting user from request - The user or username is no longer "injected" in the view sets - The user and username are obtained in the serializers from requests --- program/serializers.py | 25 +++++++++++++++---------- program/views.py | 27 +++++---------------------- 2 files changed, 20 insertions(+), 32 deletions(-) diff --git a/program/serializers.py b/program/serializers.py index 93369397..f46a5749 100644 --- a/program/serializers.py +++ b/program/serializers.py @@ -135,10 +135,10 @@ class UserSerializer(serializers.ModelSerializer): if profile_data: profile = UserProfile( - user=user, cba_username=profile_data.get("cba_username").strip(), cba_user_token=profile_data.get("cba_user_token").strip(), - created_by=self.context["user"], + created_by=self.context.get("request").user.username, + user=user, ) profile.save() @@ -167,7 +167,7 @@ class UserSerializer(serializers.ModelSerializer): profile.cba_username = profile_data.get("cba_username") profile.cba_user_token = profile_data.get("cba_user_token") - profile.updated_by = self.context["user"] + profile.updated_by = self.context.get("request").user.username profile.save() instance.save() @@ -260,7 +260,7 @@ class ImageSerializer(serializers.ModelSerializer): def create(self, validated_data): """Create and return a new Image instance, given the validated data.""" - image = Image.objects.create(**validated_data | self.context) + image = Image.objects.create(owner=self.context.get("request").user, **validated_data) image.save() return image @@ -311,7 +311,9 @@ class HostSerializer(serializers.ModelSerializer): links_data = validated_data.pop("links", []) - host = Host.objects.create(**validated_data | self.context) # created_by + host = Host.objects.create( + created_by=self.context.get("request").user.username, **validated_data + ) for link_data in links_data: HostLink.objects.create(host=host, **link_data) @@ -337,7 +339,7 @@ class HostSerializer(serializers.ModelSerializer): for link_data in links_data: HostLink.objects.create(host=instance, **link_data) - instance.updated_by = self.context.get("updated_by") + instance.updated_by = self.context.get("request").user.username instance.save() @@ -451,7 +453,9 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer): music_focus = validated_data.pop("music_focus") links_data = validated_data.pop("links", []) - show = Show.objects.create(**validated_data | self.context) # created_by + show = Show.objects.create( + created_by=self.context.get("request").user.username, **validated_data + ) # Save many-to-many relationships show.owners.set(owners) @@ -508,7 +512,7 @@ class ShowSerializer(serializers.HyperlinkedModelSerializer): for link_data in links_data: ShowLink.objects.create(show=instance, **link_data) - instance.updated_by = self.context.get("updated_by") + instance.updated_by = self.context.get("request").user.username instance.save() @@ -753,9 +757,10 @@ class NoteSerializer(serializers.ModelSerializer): contributors = validated_data.pop("contributors", []) # the creator of the note is the owner - validated_data["owner"] = self.context["request"].user note = Note.objects.create( - created_by=self.context["request"].user.username, **validated_data + created_by=self.context.get("request").user.username, + owner=self.context.get("request").user, + **validated_data, ) note.contributors.set(contributors) diff --git a/program/views.py b/program/views.py index c4ece009..baa92773 100644 --- a/program/views.py +++ b/program/views.py @@ -313,10 +313,7 @@ class APIImageViewSet(viewsets.ModelViewSet): def create(self, request, *args, **kwargs): """Create an Image instance. Any user can create an image.""" - serializer = ImageSerializer( - data=request.data, - context={"owner": request.user.username}, - ) + serializer = ImageSerializer(data=request.data) if serializer.is_valid(): serializer.save() @@ -409,9 +406,7 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet): if not request.user.is_superuser: return Response(status=status.HTTP_401_UNAUTHORIZED) - serializer = ShowSerializer( - data=request.data, context={"created_by": request.user.username} - ) + serializer = ShowSerializer(data=request.data) if serializer.is_valid(): serializer.save() @@ -433,12 +428,7 @@ class APIShowViewSet(DisabledObjectPermissionCheckMixin, viewsets.ModelViewSet): partial = kwargs.get("partial", False) show = self.get_object() - serializer = ShowSerializer( - show, - data=request.data, - context={"updated_by": request.user.username}, - partial=partial, - ) + serializer = ShowSerializer(show, data=request.data, partial=partial) if serializer.is_valid(): # Common users mustn't edit the show's name @@ -911,9 +901,7 @@ class APIHostViewSet(ActiveFilterMixin, viewsets.ModelViewSet): pagination_class = LimitOffsetPagination def create(self, request, *args, **kwargs): - serializer = HostSerializer( - data=request.data, context={"created_by": request.user.username} - ) + serializer = HostSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) @@ -923,12 +911,7 @@ class APIHostViewSet(ActiveFilterMixin, viewsets.ModelViewSet): def update(self, request, *args, **kwargs): partial = kwargs.get("partial", False) host = self.get_object() - serializer = HostSerializer( - host, - data=request.data, - context={"updated_by": request.user.username}, - partial=partial, - ) + serializer = HostSerializer(host, data=request.data, partial=partial) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_200_OK) -- GitLab