首页 > 解决方案 > Django 等待带有 @database_sync_to_async 装饰器的函数以获取多个对象抛出错误

问题描述

我正在为异步功能集成 django 频道。我正在尝试在函数上使用 await 来获取用户模型的多个对象。

消费者.py

class TeamConsumer(AsyncConsumer):
    async def websocket_connect(self, event):
        await self.send({
                "type":"websocket.accept"
        })

    async def websocket_receive(self, event):
       o_user = await self.users()
       print(o_user)

    @database_sync_to_async
    def users(self):
        return UserModel.objects.all()

尝试从上述代码中获取用户会导致错误“您不能从异步上下文中调用它 - 使用线程或 sync_to_async。”

但是,如果我使用“UserModel.objects.all().first()”获取单个对象,一切正常。

标签: djangodjango-channelsasgi

解决方案


我认为这是因为查询集很懒惰。调用 UserModel.objects.all() 实际上并不执行查询。打印时查询正在执行。尝试将其转换为 users() 方法中的列表。


推荐阅读