Вам понадобится модель, которая идентифицирует уведомление.
class Notification(models.Model):
created = models.DateTimeField(auto_add_now=True)
updated = models.DateTimeField(auto_now=True)
text = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
read = models.DateTimeField(null=True, blank=True)
Вы можете создать любое количество уведомлений для пользователя в любом месте вашего приложения.
Если вам нужно показать их на любой странице лучше всего использовать их в процессоре контекста . Если бы это было только на указанной c странице, я бы добавил их в контекст визуализации шаблона для этого представления.
Что касается пометки их как прочитанных, у вас есть решение принять. Вы можете пометить их как прочитанные, когда они будут отображаться пользователю, что произойдет одновременно с извлечением их в любой из указанных выше ситуаций. Или вы можете заставить пользователя отклонить их, а затем пометить как прочитанные. Если вы сделаете это, вам потребуется представление ajax, которое принимает идентификатор уведомления или какой-либо другой идентификатор, проверяет, запрашивающий пользователь соответствует пользователю уведомления и устанавливает read=django.utils.timezone.now()
Редактировать:
Перечитав вопрос, вот более подходящий ответ:
class Notification(models.Model):
created = models.DateTimeField(auto_add_now=True)
text = models.TextField()
users = models.ManyToManyField(User, through='NotificationUser')
class NotificationUser(models.Model):
created = models.DateTimeField(auto_add_now=True)
updated = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
notification = models.ForeignKey(User, on_delete=models.CASCADE)
read = models.DateTimeField(null=True, blank=True)
Таким образом, вы можете иметь один экземпляр уведомления с его свойствами, такими как текст (или, возможно, создатель). Кроме того, у пользователя-уведомителя указываются c свойства, например, прочитал / увидел ли этот конкретный пользователь уведомление. Изменить: я перечитал вашу проблему, и он говорит, чтобы отправить уведомление нескольким пользователям. В этом случае что-то вроде этого может быть лучше.