Django каналы получают данные из базы данных и отправляют их через вебсокет
error:
File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1173, in execute_sql
cursor = self.connection.cursor()
File "/Users/soubhagyapradhan/Desktop/upwork/polyverse/polyverse_api/env/lib/python3.8/site-packages/django/utils/asyncio.py", line 24, in inner
raise SynchronousOnlyOperation(message)
django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.
WebSocket DISCONNECT /ws/test/ [127.0.0.1:63954]
comsumer.py
import json
from channels.generic.websocket import AsyncWebsocketConsumer
from random import randint
from api.models import Asset
class WSConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
res = list(Asset.objects.filter(id=56).values('token_id'))
await self.send(json.dumps(res))
вот код, который я использую для websocket. здесь Я получаю данные из базы данных, но получаю вышеуказанную ошибку
пожалуйста, посмотрите, в чем будет заключаться ошибка?
Думаю, вам нужно database_sync_async вот так:
class WSConsumer(AsyncWebsocketConsumer):
# rest of the code
res = await database_sync_to_async(self.get_asset(56))()
# rest of the code
def get_asset(self, id):
return list(Asset.objects.filter(id=id).values('token_id'))
Я считаю, что это потому, что Django ORM является синхронным.