我正在使用 .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})
我认为您显示的
.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
。