django - 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()”获取单个对象,一切正常。
解决方案
我认为这是因为查询集很懒惰。调用 UserModel.objects.all() 实际上并不执行查询。打印时查询正在执行。尝试将其转换为 users() 方法中的列表。
推荐阅读
- google-cloud-storage - 如何使用 CDAP 创建从 BigQuery 到 Google Storage 的 ETL?
- python - np.save 有没有办法处理 MPI 文件对象?
- html - 无法让页脚左右对齐
- c# - 如何获取要发布到控制器的复选框值列表
- javascript - TS2339:“元素”类型上不存在属性“样式”
- reactjs - 为 Material-Table 创建自定义模态
- user-interface - 如何正确设计高 DPI 感知(4k 就绪)的 Delphi 应用程序 UI?
- amazon-s3 - S3 网络托管端点产生“无法访问此站点”
- python - 使用python进行一次热编码的快速方法
- python-3.x - 进行 for 循环,直到某个条件变为不真实