from rest_framework import permissions from rest_framework import viewsets, mixins from collection import models from collection.serializers import back as serializers from utils.views import BindObjectMixin class CollectionViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): """ViewSet for Collection model.""" # pagination_class = None permission_classes = (permissions.AllowAny,) serializer_class = serializers.CollectionBackOfficeSerializer def get_queryset(self): """Overridden method 'get_queryset'.""" qs = models.Collection.objects.all().order_by('-created') if self.request.country_code: qs = qs.by_country_code(self.request.country_code) return qs class CollectionBackOfficeViewSet(mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, mixins.RetrieveModelMixin, BindObjectMixin, CollectionViewSet): """ViewSet for Collection model for BackOffice users.""" permission_classes = (permissions.IsAuthenticated,) queryset = models.Collection.objects.all() serializer_class = serializers.CollectionBackOfficeSerializer bind_object_serializer_class = serializers.CollectionBindObjectSerializer def perform_binding(self, serializer): data = serializer.validated_data collection = data.pop('collection') obj_type = data.get('type') related_object = data.get('related_object') if obj_type == self.bind_object_serializer_class.ESTABLISHMENT: collection.establishments.add(related_object) elif obj_type == self.bind_object_serializer_class.PRODUCT: collection.products.add(related_object) def perform_unbinding(self, serializer): data = serializer.validated_data collection = data.pop('collection') obj_type = data.get('type') related_object = data.get('related_object') if obj_type == self.bind_object_serializer_class.ESTABLISHMENT: collection.establishments.remove(related_object) elif obj_type == self.bind_object_serializer_class.PRODUCT: collection.products.remove(related_object)