def METHOD_NAME(self, *args, **kwargs):
    proposal_pks = self.request.POST.getlist("proposal_pk")
    proposals = Proposal.objects.filter(pk__in=proposal_pks)
    new_status = self.request.POST.get("mark_status")
    if new_status:
        # <queryset>.update() will not work here because
        # the status field lives in the related model
        # ProposalResult.
        for proposal in proposals:
            try:
                proposal.review_result.status = new_status
                proposal.review_result.save()
            except ProposalResult.DoesNotExist:
                proposal.review_result = ProposalResult.objects.create(
                    proposal=proposal, status=new_status
                )
        return HttpResponseRedirect(
            reverse("review_proposal_result_list", args=[new_status])
        )
    elif self.request.POST.get("send_notification"):
        # Save ProposalNotification to database, as a type
        # of rudimentary logging.
        notification = ProposalNotification.objects.create(
            from_address=self.request.POST.get("from_address"),
            subject=self.request.POST.get("subject"),
            body=self.request.POST.get("body"),
        )
        notification.proposals.set(proposals)
        unemailed_speakers = notification.send_email()
        for speaker in unemailed_speakers:
            messages.warning(
                self.request,
                "Speaker {} does not have an email address "
                "and has not been notified.".format(speaker.name)
            )
        return HttpResponseRedirect(reverse("review_proposal_list"))
    elif self.request.POST.get("create_presentations"):
        num_presentations_created = 0
        for proposal in proposals:
            # We don't need to add all of the proposal's metadata
            # to the presentation. Most fields will automatically be
            # added when we save the proposal.
            # See https://github.com/pydata/conf_site/pull/176.
            # Note that the title needs to be added here so that
            # a presentation's slugs are created properly.
            presentation, created = Presentation.objects.get_or_create(
                proposal_base=proposal.proposalbase_ptr,
                section=proposal.section,
                speaker=proposal.speaker,
                title=proposal.title,
            )
            # If the presentation already existed, we do not need
            # to attach it to the proposal.
            if created:
                proposal.presentation = presentation
                proposal.save()
                num_presentations_created += 1
        # Create a message if any new presentations were created.
        if num_presentations_created:
            messages.success(
                self.request,
                "{} presentation{} created.".format(
                    num_presentations_created,
                    pluralize(num_presentations_created),
                ),
            )
        else:
            messages.warning(
                self.request,
                "All selected proposals already had presentations.",
            )
        # Since the "create presentations" action can only
        # be initated from the "Accepted Proposals"
        # category listing, we return the user there.
        return HttpResponseRedirect(
            reverse(
                "review_proposal_result_list",
                args=[ProposalResult.RESULT_ACCEPTED],
            )
        )