Django ORM:.filter() 找到记录,但具有相同查询参数的 .get() 找不到记录

问题描述 投票:0回答:1

我正在使用 .filter 进行 ORM 查询,没有指定返回两条记录的时间范围。然后我打印这些记录列值以确保我不会出现任何不匹配,但是当我在 .GET 方法上使用完全相同的值时,我会收到DoesNotExist 错误,即使它只是打印该记录。在提交愚蠢的评论之前,请根据打印的声明验证您的评论是否有效:也许您犯了拼写错误?!

这是印刷品:

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})
python django django-orm
1个回答
0
投票

我认为您显示的

.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

© www.soinside.com 2019 - 2024. All rights reserved.