1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
from rest_framework import generics, status
from rest_framework.permissions import AllowAny, IsAdminUser
from rest_framework.response import Response
from opinion.models import Opinion
from opinion.serializers import OpinionSerializer
class ListCreateOpinionView(generics.ListCreateAPIView):
"""Creates (POST) or lists (GET) new opinions"""
serializer_class = OpinionSerializer
permission_classes = (AllowAny,)
def get_queryset(self):
"""Filter by store_id, user_id, purchase_id or dates"""
queryset = Opinion.objects.all()
store_id = self.request.query_params.get('store_id', False)
user_id = self.request.query_params.get('user_id', False)
purchase_id = self.request.query_params.get('purchase_id', False)
from_date = self.request.query_params.get('from_date', False)
to_date = self.request.query_params.get('to_date', False)
if store_id:
queryset = queryset.filter(store_id=store_id)
if user_id:
queryset = queryset.filter(user_id=user_id)
if purchase_id:
queryset = queryset.filter(purchase_id=purchase_id)
if from_date and to_date:
queryset = queryset.filter(
created_at__range=[from_date, to_date])
return queryset
def post(self, request, *args, **kwargs):
try:
Opinion.objects.get(purchase_id=request.data['purchase_id'])
except Opinion.DoesNotExist:
return self.create(request, *args, **kwargs)
return Response(
{'detail': 'This purchase has aleady been commented'},
status=status.HTTP_406_NOT_ACCEPTABLE)
class RetrieveUpdateDestroyOpinionView(generics.RetrieveUpdateDestroyAPIView):
"""Retrieves (GET), updates (PUT), partial updates (PATCH) or destroys
(DELETE) opinions"""
serializer_class = OpinionSerializer
permission_classes = (AllowAny,)
queryset = Opinion.objects.all()
def delete(self, request, *args, **kwargs):
if not IsAdminUser().has_permission(request, self):
self.permission_denied(
request, message=getattr(IsAdminUser, 'message', None)
)
return self.destroy(request, *args, **kwargs)
|