Отправка уведомления определенному типу пользователей и сохранение уведомления в базе данных с помощью django channels

Я хочу отправить уведомление определенной группе пользователей. Допустим, определенная группа - Admin. Когда пользователь регистрируется на моем сайте, после одобрения администратором он будет активирован. Для этого администратор должен получить уведомление. Основная проблема была связана с дизайном базы данных. Мне нужно сохранить уведомление.

class Notification(models.Model):
    view_name = models.CharField(max_length=255)
    notification_type = models.CharField(max_length=255)
    sender = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='notification_sender')
    recipient = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='notification_receiver')
    title = models.CharField(max_length=255)
    redirect_url = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_read = models.BooleanField(default=False)

Вот модель. Здесь получатель будет администратором. Теперь основная проблема в том, что будет более 1 администратора. Если я хочу сохранить уведомление, то решение, которое пришло мне в голову, это итерация по модели User найти администратора и отправить каждому администратору уведомление, что не является хорошим решением. Django channels doc показывает, что есть способ отправки нескольким пользователям, используя gruop_send() да, я могу использовать это, но как я могу сохранить уведомление в базе данных с несколькими получателями?

Вы можете использовать отношения "многие ко многим" между Notification и User, чтобы связать несколько получателей с одним уведомлением:

class Notification(models.Model):
    view_name = models.CharField(max_length=255)
    notification_type = models.CharField(max_length=255)
    sender = models.ForeignKey(User, on_delete=models.DO_NOTHING, related_name='notification_sender')
    recipients = models.ManyToManyField(User, related_name='notification_receivers')
    title = models.CharField(max_length=255)
    redirect_url = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_read = models.BooleanField(default=False)

Затем для доступа к получателям:

notification = Notification.objects.get(id=1)
recipients = notification.recipients.all()
Вернуться на верх