首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Channels 'coroutine‘对象不可订阅

Django Channels 'coroutine‘对象不可订阅
EN

Stack Overflow用户
提问于 2020-08-06 16:38:57
回答 1查看 445关注 0票数 0

我有一个带有Django通道的WebSocket,一旦消费者连接上,我就会尝试向他们发送数据。

consumers.py:

代码语言:javascript
复制
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]

启动client WebSocket时:

代码语言:javascript
复制
ws = new WebSocket("ws://127.0.0.1:8000/ws/camera_online/connect/")

我在终端中打印出以下错误:

代码语言:javascript
复制
    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]
EN

回答 1

Stack Overflow用户

发布于 2020-08-06 20:23:30

我一直在使用错误的类,因为我只用ORM来获取两个对象(不是繁重的操作),我应该使用通道通用模块中的WebsocketConsumer。

代码语言:javascript
复制
class CameraOnlineConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()
        logger.info(f"Added {self.channel_name} channel to workflow")
        query_set = self.get_events()
        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.default_code)
        else:
            return self.send(text_data=CameraOffline.default_code)

    def get_events(self):
        return PastureEvent.objects.filter(result=7, farm_id='1').order_by('-time_stamp')[:2]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63279849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档