Django正在等待带有@database_sync_to_async装饰器的函数来获取多个对象引发错误

问题描述 投票:0回答:1

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

consumers.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()”获取单个对象,则一切正常。

django django-channels asgi
1个回答
0
投票

我认为这是因为查询集是惰性的。调用UserModel.objects.all()实际上并不会执行查询。当您打印查询时,查询将被执行。尝试将其转换为users()方法内的列表。

© www.soinside.com 2019 - 2024. All rights reserved.