Мне нужно преобразовать координаты местоположения в расстояние и затем соответствующим образом отфильтровать набор запросов с помощью django-filter

Далее следует соответствующий код:

Models.py

class RentTypeChoices(models.IntegerChoices):
        DAILY = 0
        HOURLY = 1
        MONTHLY = 2

rent_type = models.PositiveSmallIntegerField(
    choices=RentTypeChoices.choices)


title = models.CharField(max_length=256)

available_from = models.DateField(default=datetime.date.today)

category = models.ForeignKey(
    Category, related_name="rent_posts", on_delete=models.CASCADE)


price = models.DecimalField(decimal_places=2, max_digits=6)



# Need to convert below location coords to distance
latitude = models.CharField(max_length=120)
longitude = models.CharField(max_length=120)


is_available = models.BooleanField(default=True)

Filters.py

from django_filters import rest_framework as filters
from apps.embla_services.models import RentPost


class RentPostFilters(filters.FilterSet):



    title = filters.CharFilter(lookup_expr="icontains")
    is_available = filters.BooleanFilter()
    rent_type = filters.ChoiceFilter(choices=RentPost.RentTypeChoices.choices)
    category__id = filters.NumberFilter()
    available_from = filters.DateFromToRangeFilter()
    price = filters.RangeFilter()
    # i need to filter this model by distance also
    # search query would contain the min or the maximum distance and i would need to filter 
    # accordingly

    class Meta:
        model = RentPost
        fields = ["title", "is_available",
                  "rent_type", "category", "available_from", "price"]

Views.py

from django_filters import rest_framework as filters
from apps.embla_services.models import RentPost
from apps.embla_services.filters import RentPostFilters  

class SearchRentPosts(generics.ListAPIView):
queryset = RentPost.objects.all()
serializer_class = RentPostBriefSerializer
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = RentPostFilters

я знаю, как преобразовать координаты местоположения между двумя точками, используя этот пост Getting distance between two points based on latitude/longitude. однако как именно использовать эти знания для фильтрации координат местоположения, чтобы получить расстояние - моя проблема.

следующий пример поискового запроса со стороны клиента

{{baseUrl}}/rent/search-posts?title=k&rent_type=0&category=14&available_from_after=2022-04-`26&available_from_before=2022-10-05&price_min=40.00&price_max=45.00&distance_max = 5&distance_min=1`

все остальное выполняется отлично, единственная проблема - это расстояние. клиенту нужно отфильтровать результаты поиска по расстоянию между его текущим местоположением и местоположением пункта аренды. мы получаем координаты местоположения клиента, и у нас также сохраняются координаты местоположения пункта аренды

Надеюсь, я хорошо объяснил свой вопрос.

Ps. Я не добавил код сериализатора, так как он не требуется в этом посте.

Вернуться на верх