Django Объект каналов 'coroutine' не может быть подписан - PullRequest
0 голосов
/ 06 августа 2020

У меня есть WebSocket с Django каналами, по которым я пытаюсь отправить данные потребителю после его подключения.

consumer.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]

1 Ответ

0 голосов
/ 06 августа 2020

Я использовал неправильный класс, так как я получаю только два объекта с помощью ORM (не тяжелая операция). Я должен использовать WebsocketConsumer из модуля c каналов.

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...