Open
Description
A year ago a similar issue was filled for Django framework encode/django-rest-framework#1488
Model example:
class PointOfSales(models.Model):
location = models_gis.PointField(blank=True, null=True)
class Deal(models.Model):
promo_code = models.CharField(max_length=25, blank=True, null=True)
points_of_sales = models.ManyToManyField(PointOfSales, related_name='deals')
I wanted to filter deals in points of sales near me:
class DealViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = DealSerializer
queryset = Deal.objects.all()
filter_backends = (DistanceToPointFilter, )
distance_filter_field = 'points_of_sales__location'
distance_filter_convert_meters = True # by default we use srid=4326 (uses degrees), but input should be in meters
A deal in two points of sales near me will end up twice in the response.
In /rest_framework_gis/filters.py there is a filter_queryset
method where I added .distinct()
just like in the PR that fixed restframework encode/django-rest-framework@3522b69 and I got the expected result. I didn't break any other of my tests. Might it be a fix?
def filter_queryset(self, request, queryset, view):
# ...
return queryset.filter(Q(**{'%s__%s' % (filter_field, geoDjango_filter): (point, dist)})).distinct()