Может ли кто-нибудь помочь? Отправка уведомлений всем пользователям или некоторым пользователям в формах django

Я хочу отправить одно уведомление нескольким пользователям или всем пользователям. Я пробовал использовать многие поля, но параметр sent to id не сохраняет идентификаторы пользователей, которым я отправил сообщение.

Models.py

class Notifications(models.Model):
    id=models.AutoField(primary_key=True)
    sent_to = models.ManyToManyField(CustomUser)
    message = models.TextField(null=True)
    message_reply = models.TextField(null=True)
    created_at=models.DateTimeField(auto_now_add=True)
    updated_at=models.DateTimeField(auto_now=True)

Views.py

def add_notification(request):

    notifs = Notifications.objects.all()
    users = CustomUser.objects.filter(is_staff=True)

    if request.method == 'POST':
        form = AddNotifForm(request.POST)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.message_reply = "none"
            instance.save()
            sent_to = form.cleaned_data.get('sent_to')
            messages.success(request, f'Message has been successfully sent .')
            return redirect('add_notif')
    else:
        form = AddNotifForm()

    context={

        'notifs' : notifs,
        'form' : form,
        'users' : users,
    }

    template_name ='main-admin/add-notif.html'
    return render(request, template_name, context)

Forms.py

class AddNotifForm(forms.ModelForm):

    sent_to = forms.ModelMultipleChoiceField(
            queryset=CustomUser.objects.filter(is_staff=True).exclude(is_superuser=True),
            widget=forms.CheckboxSelectMultiple,
            required=True)

    class Meta: 
        model = Notifications
        fields = ['sent_to', 'message']

От docs:

каждый раз, когда вы сохраняете форму, используя commit=False, Django добавляет метод save_m2m() к вашему подклассу ModelForm. После того, как вы вручную сохранили экземпляр, созданный формой, вы можете вызвать save_m2m() для сохранения данных формы "многие-ко-многим".

Поэтому вам придется вызывать save_m2m() после instance.save(), если вы используете commit=False:

        instance = form.save(commit=False)
        instance.message_reply = "none"
        instance.save()
        form.save_m2m() # <-- Add this
Вернуться на верх