【发布时间】:2020-11-26 11:53:58
【问题描述】:
我有一个带有 Django 通道的 WebSocket,我试图在连接后向消费者发送数据。
consumers.py:
class CameraOnlineConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
logger.info(f"Added {self.channel_name} channel to workflow")
query_set = await self.get_events()
print(query_set)
minute_delta = timedelta(seconds=60)
difference = query_set[0].time_stamp - query_set[1].time_stamp
if difference <= minute_delta:
return self.send(text_data=CameraOnline.status_code)
else:
return self.send(text_data=CameraOffline.status_code)
@database_sync_to_async
async def get_events(self):
return PastureEvent.objects.filter(result=7).order_by('-time_stamp')[:2]
启动客户端WebSocket时:
ws = new WebSocket("ws://127.0.0.1:8000/ws/camera_online/connect/")
我在终端中打印出这个错误:
difference = query_set[0].time_stamp - query_set[1].time_stamp
TypeError: 'coroutine' object is not subscriptable
WebSocket DISCONNECT /ws/camera_online/connect/ [127.0.0.1:43014]
【问题讨论】:
-
我不确定,但也许您需要从
get_events返回固定的行集合。试试return list(PastureEvent.objects. ...)。 -
@VisioN 投射到列表返回相同的错误
-
@VisioN 打印查询集返回:
标签: python django websocket django-channels