Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class TV(models.Model):
- brand = models.CharField(max_length=100, null=True)
- price = models.DecimalField(max_digits=10, decimal_places=2)
- class TVViewSet(viewsets.ModelViewSet, ListModelMixin):
- serializer_class = TVSerializer
- filter_backends = (filters.DjangoFilterBackend, filters.OrderingFilter,)
- filter_class = TVFilter
- ordering_fields = ["num_stores","stores__price",]
- ordering = ("-num_stores",)
- def get_queryset(self):
- queryset = TV.objects.annotate(num_stores=Count('stores')).order_by('-num_stores')
- if self.request.GET.get("search"):
- selection = self.request.GET.get("search")
- if selection:
- queryset = TV.objects.annotate(
- similarity=TrigramSimilarity('brand', selection)
- ).filter(similarity__gt=0.3).order_by('-similarity')
- return queryset
- def list(self, request, *args, **kwargs):
- response = super(TVViewSet, self).list(request, args, kwargs)
- tvs = self.get_queryset().values('brands', 'stores__store')
- brandss = set([])
- prices = set([])
- for item in tvs:
- brands.add(item['brand'])
- prices.add(item['store__price'])
- filters = OrderedDict()
- filters['min_price'] = min(prices)
- filters['max_price'] = max(prices)
- filters['brand'] = brands
- return response
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement