Отправить сообщение всем пользователям в Django

Я собирался создать функцию, которая посылает сообщение всем пользователям, используя forloop. но потом я подумал, что этот метод займет много времени в процессе, если членов много...
Поэтому я пришел спросить, есть ли какой-нибудь лучший метод, чтобы игнорировать forloop и сгладить процесс.
Модель:

class TblExamNotification(models.Model):

    exam = ForeignKey(TblExam,on_delete=models.CASCADE,blank=True, null=True)
    user = ForeignKey(Members,on_delete=models.CASCADE,blank=True, null=True)
    is_seen = BooleanField(default=False)

    def __str__(self):
        return str(self.id)

Просмотров:

for member in memebers.exclude(member = request.user):
           notif_obj = Members.objects.create(user=member , exam=exam_obj)
           notif_obj .save()

Сначала создайте список всех уведомлений, которые вы хотите использовать, затем сохраните их в массовом порядке с помощью bulk_create(…) [Django-doc]:

items = [
    TblExamNotification(user=member , exam=exam_obj)
    for member in memebers.exclude(member=request.user)
]

TblExamNotification.objects.bulk_create(items)

Узким местом (очень) вероятно является не сам цикл for, а тот факт, что вы использовали множество запросов к базе данных.

Проблема не в цикле for. Проблема в том, что вы делаете запрос к БД при каждом создании объекта Members.

Вы можете уменьшить количество просмотров, используя bulk create, который делает запрос только один раз для создания нескольких объектов.

Ref: Bulk create

member_objs = [Members(user=member, exam=exam_obj) for member in members.exclude(member=request.user)]
Members.objects.bulk_create(member_objs)
Вернуться на верх