def new(request): selected_user = None if request.POST: form = NewMessageForm(request.user, request.POST) if form.is_valid(): if form.cleaned_data['user']: m = Message(user=form.cleaned_data['user'], author=request.user, content=form.cleaned_data['content'], subject=form.cleaned_data['subject']) m.save() send_new_message_notification.delay(m.pk) elif form.cleaned_data['team']: now = datetime.now() # TODO: Move this into a task for performance? language = form.cleaned_data['language'] # We create messages using bulk_create, so that only one transaction is needed # But that means that we need to sort out the pk of newly created messages to # be able to send the notifications message_list = [] for member in form.cleaned_data['team'].members.all(): if member.user != request.user: if (len(language) == 0) or (language in set( UserLanguage.objects.filter( user__exact=member.user).values_list( 'language', flat=True))): message_list.append( Message(user=member.user, author=request.user, content=form.cleaned_data['content'], subject=form.cleaned_data['subject'])) Message.objects.bulk_create(message_list) new_messages_ids = Message.objects.filter( created__gt=now).values_list('pk', flat=True) for pk in new_messages_ids: send_new_message_notification.delay(pk) messages.success(request, _(u'Message sent.')) return HttpResponseRedirect(reverse('messages:inbox')) else: if request.GET.get('user'): selected_user = User.objects.get(username=request.GET['user']) else: form = NewMessageForm(request.user) if request.GET.get('user'): selected_user = User.objects.get(username=request.GET['user']) return { 'selected_user': selected_user, 'user_info': request.user, 'form': form, }
def new(request): selected_user = None if request.POST: form = NewMessageForm(request.user, request.POST) if form.is_valid(): if form.cleaned_data['user']: m = Message(user=form.cleaned_data['user'], author=request.user, content=form.cleaned_data['content'], subject=form.cleaned_data['subject']) m.save() send_new_message_notification.delay(m.pk) elif form.cleaned_data['team']: # TODO: Move this into a task for performance? # Once we switch to Django 1.4, this should be replaced with # `bulk_create`. for member in form.cleaned_data['team'].members.all(): if member.user != request.user: m = Message(user=member.user, author=request.user, content=form.cleaned_data['content'], subject=form.cleaned_data['subject']) m.save() send_new_message_notification.delay(m.pk) messages.success(request, _(u'Message sent.')) return HttpResponseRedirect(reverse('messages:inbox')) else: if request.GET.get('user'): selected_user = User.objects.get(username=request.GET['user']) else: form = NewMessageForm(request.user) if request.GET.get('user'): selected_user = User.objects.get(username=request.GET['user']) return { 'selected_user': selected_user, 'user_info': request.user, 'form': form, }
def _create_message(self, to_user): self.message = Message(user=to_user, author=self.author, subject=self.subject, content=self.body) self.message.save()