Python Django 3.1-异步视图-使用查询集

Python Django 3.1-异步视图-使用查询集,python,django,asynchronous,django-3.1,Python,Django,Asynchronous,Django 3.1,自从3.1版(目前是beta版)以来,Django就支持异步视图 async def myview(request): users = User.objects.all() 这个例子不起作用,因为ORM还没有异步就绪 那么,目前的解决办法是什么 您不能仅将sync_to_async与queryset一起使用,因为它们不会对其进行计算: from asgiref.sync import sync_to_async async def myview(request): users

自从3.1版(目前是beta版)以来,Django就支持异步视图

async def myview(request):
    users = User.objects.all()
这个例子不起作用,因为ORM还没有异步就绪

那么,目前的解决办法是什么

您不能仅将sync_to_async与queryset一起使用,因为它们不会对其进行计算:

from asgiref.sync import sync_to_async

async def myview(request):
    users = await sync_to_async(User.objects.all)()
因此,唯一的方法是在sync_to_async中计算queryset:

async def myview(request):
    users = await sync_to_async(lambda: list(User.objects.all()))()
看起来很难看


有没有关于如何使其更好的想法?

有一个常见的问题:Django查询集是惰性的(只有在开始迭代时才会进行数据库查询):

因此,使用评估(与列表一起):


不需要lambda:
等待同步到异步(列表)(User.objects.all())
from asgiref.sync import sync_to_async

async def myview(request):
    users = await sync_to_async(list)(User.objects.all())