Как вызвать событие веб-сокета (Django Channels) при создании нового объекта модели с помощью сигналов django
Это мой сигнал
@receiver(post_save, sender=ChannelGroup)
def channel_list_signal(sender, instance, created, **kwargs):
try:
print("signals")
channel_layer = get_channel_layer()
print(channel_layer)
channel_layer.group_send(
"channellist",
{
'type': 'send_notification',
'message': "Done",
})
print("return 'Done'")
return "Done"
except Exception as e:
raise Exception(f"Something went wrong in channel_list signal {e}")
Это мой потребитель
class ListChannelConsumer(AsyncWebsocketConsumer):
def __init__(self, *args, **kwargs):
super().__init__(args, kwargs)
self.group_name = "channellist"
self.channel_layer = None
self.msg = None
self.channels = []
# self.connected = False
async def connect(self):
user_id = self.scope["url_route"]["kwargs"]["user_id"]
is_user_present = await check_user(user_id)
print(self.channel_layer)
# group_id = sender + receiver
if is_user_present:
self.user_name = is_user_present.username
await self.channel_layer.group_add(
"channellist",
"temp"
)
await self.accept()
channel = await get_channels(is_user_present.username)
await self.send(text_data=json.dumps({
"payload": "connected",
"Channels": channel
}, default=str))
else:
raise Exception(f"User not present in database or private chat does not exists")
async def disconnect(self, close_code):
# Leave room group
await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
)
async def send_notification(self, event):
print(event)
event_data = QueryDict.dict(event)
channels = event_data.get('message')
# Send message to WebSocket
self.channels = await get_channels(self.user_name)
await self.send(text_data=json.dumps({
"Success": "channels",
"message": channels
}))
Я пытаюсь добиться того, что хочу запускать событие send_notification всякий раз, когда я создаю новый канал в моей базе данных, но когда я попытался это сделать, это не работает. не работает на самом деле я пытаюсь проверить, какой слой канала был использован использовался с помощью pring channel_layer он такой же. но когда я печатаю channel_layer.group_send он имеет разные coroutine на разных слоях. Может ли кто-нибудь помочь мне, что я могу сделать или какую ошибку я допускаю. Я использую в памяти канальный слой