blob: 66cadeb5e2a85b5de32a1d53ab879e04d2b837b9 (
plain)
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
|
from rest_framework import authentication, permissions
from rest_framework.views import APIView
from rest_framework.response import Response
from ishtar_common.serializers import PublicSerializer
from archaeological_finds import models
class PublicFindAPI(APIView):
authentication_classes = (authentication.TokenAuthentication,)
permission_classes = (permissions.IsAuthenticated,)
def get_queryset(self):
empty = models.Find.objects.filter(pk=None)
basket_slug = self.request.GET.get("basket", None)
if not basket_slug:
return empty
try:
basket = models.FindBasket.objects.get(slug=basket_slug, public=True)
except models.FindBasket.DoesNotExist:
return empty
q = (
models.FindBasket.items.through.objects.filter(findbasket_id=basket.id)
.values("find_id")
.order_by("id")
)
id_list = [bi["find_id"] for bi in q]
clauses = " ".join(
"WHEN id=%s THEN %s" % (pk, i) for i, pk in enumerate(id_list)
)
ordering = "CASE {} END".format(clauses)
return models.Find.objects.filter(id__in=id_list).extra(
select={"ordering": ordering}, order_by=("ordering",)
)
def get(self, request, format=None):
serializer = PublicSerializer(self.get_queryset(), many=True)
return Response(serializer.data)
|