Django ожидайте функции с @ database_sync_to_asyn c декоратором для извлечения ошибки нескольких бросков объекта - PullRequest
1 голос
/ 29 марта 2020

Я интегрирую django каналы для asyn c capabilites. Я пытаюсь получить несколько объектов пользовательской модели, используя функцию await.

consumer.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()

Попытка получить пользователей из приведенного выше кода вызывает ошибку «Вы не можете вызвать это из контекста asyn c - используйте поток или sync_to_asyn c. "

Однако, если я выбираю один объект, используя" UserModel.objects.all (). first () ", все работает нормально .

1 Ответ

0 голосов
/ 30 марта 2020

Я думаю, это потому, что наборы запросов ленивы. Вызов UserModel.objects.all () фактически не выполняет запрос. Запрос выполняется, когда вы его печатаете. Попробуйте преобразовать его в список внутри метода users ().

...