Django ORM: .filter() находит запись, а .get() с теми же параметрами запроса - нет

Я выполняю ORM-запрос с использованием .filter без указания временных рамок, который возвращает две записи. Затем я печатаю значения столбцов этих записей, чтобы убедиться, что я не делаю никаких несоответствий, но затем, когда я использую точно такие же значения в методе .GET, я получаю ошибку DoesNotExist, хотя он только что напечатал эту запись. Пожалуйста, проверьте, является ли ваш комментарий действительным на основе распечатанных утверждений, прежде чем отправлять глупые комментарии типа: mAyBe yOu mAde A sPelLinG erRoR?!

Вот отпечатки:

Filter Query: timeframe=H4, symbol=XAUUSD, time=2024-04-10 14:00:00+00:00
Filter Record 2: XAUUSD, 2024-04-10 14:00:00, H4
GET Query: timeframe=H4, symbol=XAUUSD, time=2024-04-10 14:00:00+00:00
No record found.


@csrf_exempt
@require_http_methods(["POST"])
def get_label_data(request):
    data = json.loads(request.body)
    data = data.get('data')
    timestamp = data.get('timestamp')
    symbol_name = data.get('symbol')
    label_name_str = data.get('label_name')
    timeframe = data.get('timeframe')

    symbol = Symbol.objects.get(name=symbol_name)
    datetime_stamp = datetime.fromtimestamp(timestamp, tz=pytz.UTC)

    print(f"Filter Query: timeframe={timeframe}, symbol={symbol_name}, time={datetime_stamp}")
    forex_ohlc = ForexOHLC.objects.filter(symbol=symbol, time=datetime_stamp)
    forex_ohlc = list(forex_ohlc)[1]
    print(f"Filter Record 2: {forex_ohlc.symbol.name}, {forex_ohlc.time}, {timeframe}")

    print(f"GET Query: timeframe={timeframe}, symbol={symbol_name}, time={datetime_stamp}")
    try:
        forex_ohlc = ForexOHLC.objects.get(symbol=symbol, time=datetime_stamp, timeframe=timeframe)
    except ForexOHLC.DoesNotExist:
        print("No record found.")
    except ForexOHLC.MultipleObjectsReturned:
        print("Multiple records found.")
    except Exception as e:
        print(f"An unexpected error occurred: {e}")

    try:
        labels = TickLabel.objects.get(forex_ohlc=forex_ohlc, symbol=symbol, label_name__name=label_name_str)
        return JsonResponse({
            'label_name': labels.label_name.name,
            'label_type': labels.label_type.name,
            'hasLabel': True
        })
    except TickLabel.DoesNotExist:
        return JsonResponse({'hasLabel': False})

Я думаю, что .filter() и .get() запросы, которые вы показали, НЕ равны, потому что первый использует 2 параметра фильтра, а во втором запросе добавляется еще и третий параметр (timeframe):

forex_ohlc = ForexOHLC.objects.filter(symbol=symbol, time=datetime_stamp)
forex_ohlc = ForexOHLC.objects.get(symbol=symbol, time=datetime_stamp, timeframe=timeframe)

Это может означать, что 2 записи, найденные по запросу фильтра, имеют значение timeframe, отличное от значения H4.

Обратите внимание, что при печати найденных записей ваш код на самом деле не печатает forex_ohlc.timeframe, а вместо этого печатает только переменную фильтра timeframe.

print(f"Filter Record 2: {forex_ohlc.symbol.name}, {forex_ohlc.time}, {timeframe}")
Вернуться на верх