Как выполнить цикл в запросе Django - PullRequest
0 голосов
/ 25 октября 2018

Используя эту ссылку и эту ссылку Я написал следующий код для запроса предприятий, находящихся в радиусе одного из моих филиалов.

from django.db.models import Func, F
from li_app.models import Branch, Business

class Sin(Func):
    function = 'SIN'

class Cos(Func):
    function = 'COS'

class Acos(Func):
    function = 'ACOS'

class Radians(Func):
    function = 'RADIANS'

class Degrees(Func):
    function = 'DEGREES'

def filter_within_distance(
    branch_kwargs, 
    business_kwargs, 
    radius
):

    KM_PER_DEGREE = 111.045
    branch = Branch.objects.filter(**branch_kwargs)[0]

    lat_point = branch.branch_latitude
    long_point = branch.branch_longitude
    radlat = Radians(lat_point)
    radlong = Radians(long_point)
    radflat = Radians(F('business_latitude'))
    radflong = Radians(F('business_longitude'))
    Expression = KM_PER_DEGREE * Degrees(Acos(Cos(radlat) * Cos(radflat) * 
            Cos(radflong - radlong) + Sin(radlat) * Sin(radflat)))

    latitude_delta = radius / KM_PER_DEGREE
    longitude_delta = radius / (KM_PER_DEGREE * Cos(radlat))
    lat_range = (float(lat_point) - latitude_delta, float(lat_point) + latitude_delta)
    long_range = (float(long_point) - longitude_delta, float(long_point) + longitude_delta)
    business_kwargs['business_latitude__range'] = lat_range
    business_kwargs['business_longitude__range'] = long_range

    return Business.objects.filter(**business_kwargs).annotate(distance=Expression).filter(distance__lte=radius).order_by('distance')

Теперь я хотел бы изменить приведенный выше запрос, чтобы все предприятия находились в радиусе всех моих филиалов.Я хотел бы избежать петель Python, так что, если есть какой-либо способ выполнения циклов внутри запроса, это было бы здорово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...