Django(Python),Присвоение значения stay или on_move строке поля в модели

def mark_stay_location():
if TestLocation.objects.filter(processed=None):
    k = TestLocation.objects.filter(processed=None).order_by("timestamp")
    p = len(k)
    list_lat1 = []
    list_lat2 = []
    list_long1 = []
    list_long2 = []
    for i in range(p - 1):
        rowpairs = k[i : i + 2]
        lat1 = rowpairs[0].latitude
        list_lat1.append(lat1)
        lat2 = rowpairs[1].latitude
        list_lat2.append(lat2)
        long1 = rowpairs[0].longitude
        list_long1.append(long1)
        long2 = rowpairs[1].longitude
        list_long2.append(long2)
        lat = abs(lat2 - lat1)
        long = abs(long2 - long1)
        a = sin(lat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(long / 2) ** 2
        c = 2 * atan2(sqrt(a), sqrt(1 - a))
        for rowpair in rowpairs:
            row_id = rowpair.id
            po = TestLocation.objects.filter(id=row_id)
            if lat < 0.0009 or long < 0.0009:
                po.update(stay="stay")
                po.update(processed=True)
            else:
                po.update(stay="on_move")
                po.update(processed=True)
    print(list_lat1)
    print(list_lat2)
    print(list_long1)
    print(list_long2)
    duration()
    return Response(status=status.HTTP_200_OK)
else:
    return Response(status=status.HTTP_404_NOT_FOUND)

В базе данных, поля модели TestLocation сохраняются со значениями, В приведенной выше функции k запрашивает все строки, которые имеют processed=None, пока пример дает 100, затем я использую цикл for, используя его диапазон и итерирую каждую последовательную пару строк. В этой паре у меня есть широта и долгота в каждом элементе списка и я использовал условие if, если разница между lat или long между обоими элементами списка меньше 0.0009, то я должен установить значение stay в элемент stay .

Я хотел бы знать, можно ли исправить циклы и условия if. Потому что это делает работу, но не точно, некоторые поля сделаны неправильно.

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