Я создаю сайт с Django, и у меня есть небольшая проблема с фильтрацией. У меня есть модель User
с атрибутом location
, и я хочу, чтобы пользователь мог искать других пользователей рядом со своим местоположением. У меня есть функция distance(location1, location2)
, вычисляющая расстояние между двумя точками. Мне нужен пользователь A, чтобы искать всех пользователей B, для которых расстояние (locationA, locationB) ниже значения, выбранного A. Мне нужно получить locationA из запроса, и это в сочетании с использованием функции внутри фильтра делает вещи немного сложнее для начинающего, как я. Вот что я пробовал до сих пор:
import django_filters
class LocationFilter(django_filters.FilterSet):
distance = django_filters.NumberFilter(
field_name='location', method='distance_filter', label='...',
widget=forms.NumberInput(attrs={'class': 'form-control'}),
)
class Meta:
model = User
fields = [SOME ATTRIBUTES]
def distance_filter(self, queryset, name, value):
return queryset.filter(self__location.distance(request__user__location)__lte = value)
В настоящее время я получаю SyntaxError: invalid syntax
. Я думаю, что неправильно использую Filter.method django -фильтра, но отсутствие документации по inte rnet (кроме базовых c примеров) затрудняет понимание того, что я делаю неправильно. Я был бы очень признателен за помощь.
Заранее спасибо!
РЕДАКТИРОВАТЬ:
models.py
from django.contrib.gis.db import models
class User(models.Model):
location = models.PointField(blank = True, null = True)