wagtail-longclaw/longclaw/contrib/productrequests/api.py

41 wiersze
1.6 KiB
Python

from rest_framework import viewsets, permissions, status
from rest_framework.decorators import action
from rest_framework.response import Response
from longclaw.contrib.productrequests.serializers import ProductRequestSerializer
from longclaw.contrib.productrequests.models import ProductRequest
from longclaw.utils import ProductVariant, maybe_get_product_model
class ProductRequestViewSet(viewsets.ModelViewSet):
"""create/list/get product requests
"""
serializer_class = ProductRequestSerializer
permission_classes = (permissions.AllowAny, )
queryset = ProductRequest.objects.all()
def create(self, request):
"""Create a new product request
"""
variant_id = request.data.get("variant_id", None)
if variant_id is not None:
variant = ProductVariant.objects.get(id=variant_id)
product_request = ProductRequest(variant=variant)
product_request.save()
serializer = self.serializer_class(product_request)
response = Response(data=serializer.data, status=status.HTTP_201_CREATED)
else:
response = Response(
{"message": "Missing 'variant_id'"},
status=status.HTTP_400_BAD_REQUEST)
return response
@action(detail=False, methods=['get'])
def requests_for_variant(self, request, variant_id=None):
"""Get all the requests for a single variant
"""
requests = ProductRequest.objects.filter(variant__id=variant_id)
serializer = self.serializer_class(requests, many=True)
return Response(data=serializer.data, status=status.HTTP_200_OK)