Skip to content

Commit

Permalink
Better method for setting current user to a field. Thank @tizot
Browse files Browse the repository at this point in the history
  • Loading branch information
TheBirdie authored and TheBirdie committed Feb 15, 2016
1 parent d299860 commit 2582481
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 6 deletions.
5 changes: 4 additions & 1 deletion sigma_publications/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ class Meta:
model = Publication

poster_group = serializers.PrimaryKeyRelatedField(allow_null=True, queryset=Group.objects.all())
poster_user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
poster_user = serializers.PrimaryKeyRelatedField(
read_only=True,
default=serializers.CurrentUserDefault()
)
text = serializers.CharField()


Expand Down
4 changes: 3 additions & 1 deletion sigma_publications/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@ def test_create_publication_as_group_no_permission(self):
def test_create_publication_as_someone_else(self):
self.client.force_authenticate(user=self.users[0])
response = self.client.post(self.publications_route, self.gen_new_publication(self.users[1], None))
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Publication.objects.filter(poster_user=self.users[0]).count(), 1)
self.assertEqual(Publication.objects.filter(poster_user=self.users[1]).count(), 0)

def test_create_publication_as_group_ok(self):
self.client.force_authenticate(user=self.users[1])
Expand Down
5 changes: 1 addition & 4 deletions sigma_publications/views/publication.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,13 @@ class PublicationViewSet(mixins.CreateModelMixin, # Everyone can create a pub
permission_classes = [IsAuthenticated, ]

def create(self, request):
serializer = PublicationSerializer(data=request.data)

serializer = self.get_serializer(data=request.data)
allowed_groups = Group.objects.filter(memberships__user=request.user,
memberships__perm_rank__gte=F('req_rank_create_group_publication'))
serializer.fields['poster_group'] = serializers.PrimaryKeyRelatedField(allow_null=True, queryset=allowed_groups)

if not serializer.is_valid():
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
if serializer.validated_data.get('poster_user').id != request.user.id:
return Response("`poster_user` should be yourself", status=status.HTTP_400_BAD_REQUEST)

serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)

0 comments on commit 2582481

Please sign in to comment.