Advertisement
mrcmoresi

Untitled

Feb 24th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.41 KB | None | 0 0
  1. class TV(models.Model):
  2.     brand = models.CharField(max_length=100, null=True)
  3.     price = models.DecimalField(max_digits=10, decimal_places=2)
  4.  
  5. class TVViewSet(viewsets.ModelViewSet, ListModelMixin):
  6.     serializer_class = TVSerializer
  7.     filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,)
  8.     filter_class = TVFilter
  9.     ordering_fields =  ["num_stores","stores__price",]
  10.     ordering = ("-num_stores",)
  11.  
  12.     def get_queryset(self):
  13.         queryset = TV.objects.annotate(num_stores=Count('stores')).order_by('-num_stores')
  14.         if self.request.GET.get("search"):
  15.             selection = self.request.GET.get("search")
  16.             if selection:
  17.                 queryset = TV.objects.annotate(
  18.                     similarity=TrigramSimilarity('brand', selection)
  19.                     ).filter(similarity__gt=0.3).order_by('-similarity')
  20.  
  21.         return queryset
  22.  
  23.     def list(self, request, *args, **kwargs):
  24.         response = super(TVViewSet, self).list(request, args, kwargs)
  25.  
  26.         tvs = self.get_queryset().values('brands', 'stores__store')
  27.         brandss = set([])
  28.         prices = set([])
  29.         for item in tvs:
  30.             brands.add(item['brand'])
  31.             prices.add(item['store__price'])
  32.  
  33.         filters = OrderedDict()
  34.         filters['min_price'] = min(prices)
  35.         filters['max_price'] = max(prices)
  36.         filters['brand'] = brands
  37.         return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement