I’m using django with Telegram Bot
If i need to make ORM Query, i can do it like that
all_offers = await sync_to_async(Offers.objects.filter, thread_sensitive=True)(
status = True,
)
but not i need to make more difficult query with Q function like that
all_offers = await sync_to_async(Offers.objects.filter, thread_sensitive=True)(
status = True,
Q(some_field="1")|Q(another_field=2),
)
SyntaxError: positional argument follows keyword argument
How it can be solved?
2
Answers
as the error says, you can not place positional parameters after keyword ones, so you should put the
Q
object first:Using an asynchronous filter however does not make much sense:
.filter()
is lazy: that means that you only construct aQuerySet
asynchronously, not fetch the records themselves in an asynchronous manner. The reason there is no,.afilter(…)
, etc. is because these do not generate a query, only produce a new.aannotate(…)
QuerySet
that might (or will not) eventually make a database query.You can make use of an
async for
when you enumerate over the queryset. For more information, see the Asynchronous support section of the documentation.is correct?