我在 Telegram Bot 中使用 django
如果我需要进行 ORM 查询,我可以那样做
all_offers = await sync_to_async(Offers.objects.filter, thread_sensitive=True)(
status = True,
)
但我不需要像那样使用 Q 函数进行更困难的查询
all_offers = await sync_to_async(Offers.objects.filter, thread_sensitive=True)(
status = True,
Q(some_field="1")|Q(another_field=2),
)
语法错误:位置参数跟随关键字参数
如何解决?
如错误所述,您不能将位置参数放在关键字之后,因此您应该将
Q
对象放在第一位:
all_offers = await sync_to_async(Offers.objects.filter, thread_sensitive=True)(
Q(some_field='1') | Q(another_field=2),
status=True,
)
然而,使用异步过滤器 not 没有多大意义:
.filter()
是惰性的:这意味着您只异步构造一个 QuerySet
,而不是以异步方式获取记录本身。没有.afilter(…)
.aannotate(…)
QuerySet
,最终可能(或不会)进行数据库查询。枚举查询集时,您可以使用async for
。