def filter_average_tannin(self, queryset, name, value): min, max = get_slice_min_max(value) if min is None: return queryset.annotate(avg_tannin=Avg('reviews__tannin')).filter(avg_tannin__lte=max) elif max is None: return queryset.annotate(avg_tannin=Avg('reviews__tannin')).filter(avg_tannin__gte=min) else: return queryset.annotate(avg_tannin=Avg('reviews__tannin')).filter(avg_tannin__range=(min, max))
def filter_nr_grape_varieties(self, queryset, name, value): min, max = get_slice_min_max(value) if min is None: return queryset.annotate(nr_grapes=Count('wine__grapes')).filter(nr_grapes__lte=max) elif max is None: return queryset.annotate(nr_grapes=Count('wine__grapes')).filter(nr_grapes__gte=min) else: return queryset.annotate(nr_grapes=Count('wine__grapes')).filter(nr_grapes__range=(min, max))
def filter_nr_reviews(self, queryset, name, value): min, max = get_slice_min_max(value) if min is None: return queryset.annotate(nr_reviews=Count('reviews')).filter(nr_reviews__lte=max) elif max is None: return queryset.annotate(nr_reviews=Count('reviews')).filter(nr_reviews__gte=min) else: return queryset.annotate(nr_reviews=Count('reviews')).filter(nr_reviews__range=(min, max))
def filter_alcohol_content(self, queryset, name, value): print("filter_alcohol_content", queryset) min, max = get_slice_min_max(value) if min is None: return queryset.filter(alcohol_content__lte=max) elif max is None: return queryset.filter(alcohol_content__gte=min) else: return queryset.filter(alcohol_content__range=(min, max))
def filter_average_score(self, queryset, name, value): # The value parameter that is passed by RangeFilter is a slice object # https://stackoverflow.com/a/36459896 min, max = get_slice_min_max(value) if min is None: return queryset.annotate(avg_score=Avg('reviews__score')).filter(avg_score__lte=max) elif max is None: return queryset.annotate(avg_score=Avg('reviews__score')).filter(avg_score__gte=min) else: return queryset.annotate(avg_score=Avg('reviews__score')).filter(avg_score__range=(min, max))