how to trigger an event of web socket (Django Channels) whenever new object of model has been created via django signals

Viewed 18

This is my signal

@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}")

This is my consumer

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
        }))

What i am trying to achieve is i want to trigger send_notification event whenever i create new channel in my db but when i tried so it is not working actually i try to check the what channel layer has been used with pring channel_layer its same. but when i print channel_layer.group_send it has diff coroutine at diff layer. Can anyone help me how can i do or what mistake i am making I am using in memory channel layer

0 Answers
Related