Отправка уведомления определенному типу пользователей и сохранение уведомления в базе данных с помощью 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()