Метод Django Channels await database_to_async не работает
Я пытаюсь создать приложение для уведомлений, используя Django Channels. Проблема, с которой я сталкиваюсь, заключается в следующей ошибке:
django.core.exceptions.SynchronousOnlyOperation: Вы не можете вызвать это из асинхронного контекста - используйте поток или sync_to_async.
consumers.py
class NotificationConsumer(AsyncJsonWebsocketConsumer):
@database_sync_to_async
def get_notifications(self, user):
new_messages = NotificationSerializer(Notification.objects.filter(content=1, users_notified__in=[user]), many=True)
notifs = {
"new_messages": new_messages
}
return notifs
async def connect(self):
user = self.scope["user"]
if user:
self.channel_name = user.username
self.room_group_name = 'notification_%s' % self.channel_name
# Error happens in the following line
notification = await self.get_notifications(self.scope["user"])
print("Notification", notification)
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
await self.accept()
await self.disconnect(401)
async def disconnect(self, close_code):
await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
)
async def notify(self, event):
await self.send_json(event["content"])
Я использовал точно такой же подход при разработке чат-приложения Django Channels, которое также сохраняет сообщения в базу данных. При попытке преобразовать мой подход к системе уведомлений, он больше не работает.
Как только я перестаю ожидать метод self.get_notifications
, он работает, но я получаю обратно только <coroutine object SyncToAsync.__call__ at ...>