Skip to content

Instantly share code, notes, and snippets.

@pbekrenev
Created March 31, 2020 10:09
Show Gist options
  • Select an option

  • Save pbekrenev/aedbab626e88bc7e0716e9eb2ad2616b to your computer and use it in GitHub Desktop.

Select an option

Save pbekrenev/aedbab626e88bc7e0716e9eb2ad2616b to your computer and use it in GitHub Desktop.
class IdeaViewSet(viewsets.ModelViewSet):
lookup_field = 'slug'
serializers = {
'default': IdeaShortSerializer,
'list': IdeaShortSerializer,
'create': IdeaSerializer,
'retrieve': IdeaSerializer,
'put': IdeaSerializer,
'patch': IdeaSerializer,
'delete': IdeaSerializer,
}
def get_serializer_class(self):
return self.serializers.get(self.action, self.serializers['default'])
def get_queryset(self):
queryset = Idea.objects.exclude(status=Idea.PREMODERATING_STATUS)
status_slug = self.request.query_params.get('status')
status_id = Idea.STATUS_ID_BY_SLUG.get(status_slug)
if status_id:
queryset = queryset.filter(status=status_id)
if self.request.query_params.get('without_contest') is not None:
queryset = queryset.filter(contest=None)
else:
contest_slug = self.request.query_params.get('contest')
contest_id = Contest.objects.filter(slug=contest_slug).first()
if contest_id:
queryset = queryset.filter(contest_id=contest_id)
return queryset
def __perform_save(self, serializer):
if self.request.user.is_authenticated and self.request.user.is_active:
return serializer.save(user=self.request.user)
else:
raise exceptions.PermissionDenied
def perform_create(self, serializer):
instance = self.__perform_save(serializer)
IdeaCreatedNotification.objects.create(receiver=self.request.user, idea=instance)
def perform_update(self, serializer):
self.__perform_save(serializer)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment