Esempio n. 1
0
def update_editors_agendas(request):
    if request.method == 'POST':
        vl_formset = VoteLinkingFormSet(request.POST)
        if vl_formset.is_valid():
            # TODO: check the user's permission
            for a in vl_formset.cleaned_data:
                try:
                    av = AgendaVote.objects.get(
                           agenda__id=a['agenda_id'],
                           vote__id = a['vote_id'])
                    av.score = a['weight']
                    av.reasoning = a['reasoning']
                    av.save()
                except AgendaVote.DoesNotExist:
                    av = AgendaVote(
                           agenda_id=int(a['agenda_id']),
                           vote_id=int(a['vote_id']),
                           score = a['weight'],
                           reasoning = a['reasoning'])
                    av.save()
            return HttpResponseRedirect(reverse('vote-detail', kwargs={'object_id':a['vote_id']}))
        else:
            # TODO: Error handling: what to do with illeal forms?
            pass

    else:
        return HttpResponseNotAllowed(['POST'])
Esempio n. 2
0
def update_editors_agendas(request):
    if request.method == 'POST':
        vote_id = None
        vl_formset = VoteLinkingFormSet(request.POST)
        if vl_formset.is_valid():
            # TODO: check the user's permission
            for a in vl_formset.cleaned_data:
                if a:
                    if a['DELETE']:
                        try:
                            vote_id = a['vote_id']
                            av = AgendaVote.objects.get(
                                agenda__id=a['agenda_id'],
                                vote__id=a['vote_id'])
                            av.delete()
                        except AgendaVote.DoesNotExist:
                            pass
                    else:  # not delete, so try to create
                        try:
                            vote_id = a['vote_id']
                            print "vote id = %s" % vote_id
                            av = AgendaVote.objects.get(
                                agenda__id=a['agenda_id'],
                                vote__id=a['vote_id'])
                            av.score = a['weight']
                            av.reasoning = a['reasoning']
                            av.save()
                        except AgendaVote.DoesNotExist:
                            av = AgendaVote(agenda_id=int(a['agenda_id']),
                                            vote_id=int(a['vote_id']),
                                            score=a['weight'],
                                            reasoning=a['reasoning'])
                            av.save()
                else:
                    print "invalid form"
            if vote_id:
                return HttpResponseRedirect(
                    reverse('vote-detail', kwargs={'object_id': vote_id}))
            else:
                return HttpResponseRedirect(reverse('vote-list'))

        else:
            # TODO: Error handling: what to do with illeal forms?
            print "invalid formset"
            return HttpResponseRedirect(reverse('vote-list'))

    else:
        return HttpResponseNotAllowed(['POST'])
Esempio n. 3
0
def update_editors_agendas(request):
    if request.method == 'POST':
        vote_id = None
        vl_formset = VoteLinkingFormSet(request.POST)
        if vl_formset.is_valid():
            # TODO: check the user's permission
            for a in vl_formset.cleaned_data:
                if a:
                    if a['DELETE']:
                        try:
                            vote_id = a['vote_id']
                            av = AgendaVote.objects.get(
                                   agenda__id=a['agenda_id'],
                                   vote__id = a['vote_id'])
                            av.delete()
                        except AgendaVote.DoesNotExist:
                            pass
                    else: # not delete, so try to create
                        try:
                            vote_id = a['vote_id']
                            print "vote id = %s" % vote_id
                            av = AgendaVote.objects.get(
                                   agenda__id=a['agenda_id'],
                                   vote__id = a['vote_id'])
                            av.score = a['weight']
                            av.reasoning = a['reasoning']
                            av.save()
                        except AgendaVote.DoesNotExist:
                            av = AgendaVote(
                                   agenda_id=int(a['agenda_id']),
                                   vote_id=int(a['vote_id']),
                                   score = a['weight'],
                                   reasoning = a['reasoning'])
                            av.save()
                else:
                    print "invalid form"
            if vote_id:
                return HttpResponseRedirect(reverse('vote-detail', kwargs={'object_id':vote_id}))
            else:
                return HttpResponseRedirect(reverse('vote-list'))

        else:
            # TODO: Error handling: what to do with illeal forms?
            print "invalid formset"
            return HttpResponseRedirect(reverse('vote-list'))

    else:
        return HttpResponseNotAllowed(['POST'])
Esempio n. 4
0
def update_agendavote(request, agenda_id, vote_id):
    """
    Update agendavote relation for specific agenda-vote pair 
    """
    agenda = get_object_or_404(Agenda, pk=agenda_id)
    vote   = get_object_or_404(Vote, pk=vote_id)
    
    if request.method != 'POST':
        return HttpResponseNotAllowed(['POST'])
    
    if request.user not in agenda.editors.all():
        return HttpResponseForbidden("User %s does not have privileges to change agenda %s" % (request.user,agenda))

    try:
        action = request.POST['action']
    except KeyError:
        return HttpResponseForbidden("POST must have an 'action' attribute")
    
    if vote in agenda.votes.all():
        agendavote = agenda.agendavote_set.get(vote=vote) 

        if action=='remove':
            agendavote.delete()
            return mock_api.get_vote_api(vote)
        
        if action=='reasoning':
            agendavote.reasoning = request.POST['reasoning']
            agendavote.save()
            return mock_api.get_vote_api(vote)
        
        if action in score_text_to_score.keys():
            agendavote.set_score_by_text(action)
            agendavote.save()
            return mock_api.get_vote_api(vote)

        return HttpResponse("Action '%s' wasn't accepted" % action)
    
    else: # agenda is not ascribed to this vote
        if request.POST['action']=='ascribe':
            agenda_vote = AgendaVote(agenda=agenda,vote=vote,reasoning="")
            agenda_vote.save()
            return mock_api.get_vote_api(vote)

        return HttpResponse("Action '%s' wasn't accepted. You must ascribe the agenda before anything else." % action)
Esempio n. 5
0
def update_editors_agendas(request):
    if request.method == 'POST':
        object_type = request.POST.get('form-0-object_type', None)
        object_id = request.POST.get('form-0-vote_id', None)
        if object_type == 'vote':
            vl_formset = VoteLinkingFormSet(request.POST)
        else:
            vl_formset = MeetingLinkingFormSet(request.POST)
        if vl_formset.is_valid():
            for a in vl_formset.cleaned_data:
                if a:
                    # Check that the user is an editor of the agenda
                    # he's trying to edit
                    try:
                        agenda = Agenda.objects.get(pk=a['agenda_id'])
                        if request.user not in agenda.editors.all():
                            return HttpResponseForbidden()
                    except Agenda.DoesNotExist:
                        return HttpResponseForbidden()

                    if a['object_type'] == 'vote':
                        if a['DELETE']:
                            try:
                                object_id = a['vote_id']
                                av = AgendaVote.objects.get(
                                    agenda__id=a['agenda_id'],
                                    vote__id=a['vote_id'])
                                av.delete()
                            except AgendaVote.DoesNotExist:
                                pass
                        else:  # not delete, so try to create
                            if (a['weight'] is not ''
                                    and a['importance'] is not ''):
                                try:
                                    object_id = a['vote_id']
                                    av = AgendaVote.objects.get(
                                        agenda__id=a['agenda_id'],
                                        vote__id=a['vote_id'])
                                    av.score = a['weight']
                                    av.importance = a['importance']
                                    av.reasoning = a['reasoning']
                                    av.save()
                                except AgendaVote.DoesNotExist:
                                    av = AgendaVote(agenda_id=int(
                                        a['agenda_id']),
                                                    vote_id=int(a['vote_id']),
                                                    score=a['weight'],
                                                    importance=a['importance'],
                                                    reasoning=a['reasoning'])
                                    av.save()
                    if a['object_type'] == 'committeemeeting':
                        if a['DELETE']:
                            try:
                                object_id = a['vote_id']
                                av = AgendaMeeting.objects.get(
                                    agenda__id=a['agenda_id'],
                                    meeting__id=a['vote_id'])
                                av.delete()
                            except AgendaMeeting.DoesNotExist:
                                pass
                        else:  # not delete, so try to create
                            try:
                                object_id = a['vote_id']
                                av = AgendaMeeting.objects.get(
                                    agenda__id=a['agenda_id'],
                                    meeting__id=a['vote_id'])
                                av.score = a['weight']
                                av.reasoning = a['reasoning']
                                av.save()
                            except AgendaMeeting.DoesNotExist:
                                av = AgendaMeeting(
                                    agenda_id=int(a['agenda_id']),
                                    meeting_id=int(a['vote_id']),
                                    score=a['weight'],
                                    reasoning=a['reasoning'])
                                av.save()
                else:
                    logger.info("invalid form")

        else:
            # TODO: Error handling: what to do with illeal forms?
            logger.info("invalid formset")
            logger.info("%s" % vl_formset.errors)
        if object_id:
            if object_type == 'vote':
                return HttpResponseRedirect(
                    reverse('vote-detail', kwargs={'object_id': object_id}))
            else:
                return HttpResponseRedirect(
                    reverse('committee-meeting', kwargs={'pk': object_id}))
        else:  # no object id was found, return to list
            if object_type == 'vote':
                return HttpResponseRedirect(reverse('vote-list'))
            else:
                return HttpResponseRedirect(reverse('committee-list'))

    else:
        return HttpResponseNotAllowed(['POST'])
Esempio n. 6
0
def update_editors_agendas(request):
    if request.method == 'POST':
        object_type = request.POST.get('form-0-object_type',None)
        object_id = request.POST.get('form-0-vote_id',None)
        if object_type=='vote':
            vl_formset = VoteLinkingFormSet(request.POST)
        else:
            vl_formset = MeetingLinkingFormSet(request.POST)
        if vl_formset.is_valid():
            for a in vl_formset.cleaned_data:
                if a:
                    # Check that the user is an editor of the agenda
                    # he's trying to edit
                    try:
                        agenda = Agenda.objects.get(pk=a['agenda_id'])
                        if request.user not in agenda.editors.all():
                            return HttpResponseForbidden()
                    except Agenda.DoesNotExist:
                        return HttpResponseForbidden()

                    if a['object_type'] == 'vote':
                        if a['DELETE']:
                            try:
                                object_id = a['vote_id']
                                av = AgendaVote.objects.get(
                                       agenda__id=a['agenda_id'],
                                       vote__id = a['vote_id'])
                                av.delete()
                            except AgendaVote.DoesNotExist:
                                pass
                        else: # not delete, so try to create
                            if (a['weight'] is not '' and
                                a['importance'] is not ''):
                                try:
                                    object_id = a['vote_id']
                                    av = AgendaVote.objects.get(
                                           agenda__id=a['agenda_id'],
                                           vote__id = a['vote_id'])
                                    av.score = a['weight']
                                    av.importance = a['importance']
                                    av.reasoning = a['reasoning']
                                    av.save()
                                except AgendaVote.DoesNotExist:
                                    av = AgendaVote(
                                           agenda_id=int(a['agenda_id']),
                                           vote_id=int(a['vote_id']),
                                           score = a['weight'],
                                           importance = a['importance'],
                                           reasoning = a['reasoning'])
                                    av.save()
                    if a['object_type'] == 'committeemeeting':
                        if a['DELETE']:
                            try:
                                object_id = a['vote_id']
                                av = AgendaMeeting.objects.get(
                                       agenda__id=a['agenda_id'],
                                       meeting__id = a['vote_id'])
                                av.delete()
                            except AgendaMeeting.DoesNotExist:
                                pass
                        else: # not delete, so try to create
                            try:
                                object_id = a['vote_id']
                                av = AgendaMeeting.objects.get(
                                       agenda__id=a['agenda_id'],
                                       meeting__id = a['vote_id'])
                                av.score = a['weight']
                                av.reasoning = a['reasoning']
                                av.save()
                            except AgendaMeeting.DoesNotExist:
                                av = AgendaMeeting(
                                       agenda_id=int(a['agenda_id']),
                                       meeting_id=int(a['vote_id']),
                                       score = a['weight'],
                                       reasoning = a['reasoning'])
                                av.save()
                else:
                    logger.info("invalid form")

        else:
            # TODO: Error handling: what to do with illeal forms?
            logger.info("invalid formset")
            logger.info("%s" % vl_formset.errors)
        if object_id:
            if object_type=='vote':
                return HttpResponseRedirect(reverse('vote-detail',
                                        kwargs={'object_id':object_id}))
            else:
                return HttpResponseRedirect(reverse('committee-meeting',
                                         kwargs={'pk':object_id}))
        else: # no object id was found, return to list
            if object_type=='vote':
                return HttpResponseRedirect(reverse('vote-list'))
            else:
                return HttpResponseRedirect(reverse('committee-list'))

    else:
        return HttpResponseNotAllowed(['POST'])
Esempio n. 7
0
def update_editors_agendas(request):
    if request.method == 'POST':
        object_type = request.POST.get('form-0-object_type',None)
        object_id = request.POST.get('form-0-obj_id',None)
        vl_formset = object_formset_classes[object_type](request.POST)
        if vl_formset.is_valid():
            for a in vl_formset.cleaned_data:
                if a:
                    # Check that the user is an editor of the agenda
                    # he's trying to edit
                    try:
                        agenda = Agenda.objects.get(pk=a['agenda_id'])
                        if request.user not in agenda.editors.all():
                            return HttpResponseForbidden()
                    except Agenda.DoesNotExist:
                        return HttpResponseForbidden()

                    if a['object_type'] == 'vote':
                        if a['DELETE']:
                            try:
                                object_id = a['obj_id']
                                av = AgendaVote.objects.get(
                                       agenda__id=a['agenda_id'],
                                       vote__id = a['obj_id'])
                                av.delete()
                            except AgendaVote.DoesNotExist:
                                pass
                        else: # not delete, so try to create
                            if (a['weight'] is not '' and
                                a['importance'] is not ''):
                                try:
                                    object_id = a['obj_id']
                                    av = AgendaVote.objects.get(
                                           agenda__id=a['agenda_id'],
                                           vote__id = a['obj_id'])
                                    av.score = a['weight']
                                    av.importance = a['importance']
                                    av.reasoning = a['reasoning']
                                    av.save()
                                except AgendaVote.DoesNotExist:
                                    av = AgendaVote(
                                           agenda_id=int(a['agenda_id']),
                                           vote_id=int(a['obj_id']),
                                           score = a['weight'],
                                           importance = a['importance'],
                                           reasoning = a['reasoning'])
                                    av.save()
                    if a['object_type'] == 'bill':
                        if a['DELETE']:
                            try:
                                object_id = a['obj_id']
                                av = AgendaBill.objects.get(
                                       agenda__id=a['agenda_id'],
                                       bill__id = a['obj_id'])
                                av.delete()
                            except AgendaBill.DoesNotExist:
                                pass
                        else: # not delete, so try to create
                            if (a['weight'] is not '' and
                                a['importance'] is not ''):
                                try:
                                    object_id = a['obj_id']
                                    av = AgendaBill.objects.get(
                                           agenda__id=a['agenda_id'],
                                           bill__id = a['obj_id'])
                                    av.score = a['weight']
                                    av.importance = a['importance']
                                    av.reasoning = a['reasoning']
                                    av.save()
                                except AgendaBill.DoesNotExist:
                                    av = AgendaBill(
                                           agenda_id=int(a['agenda_id']),
                                           bill_id=int(a['obj_id']),
                                           score = a['weight'],
                                           importance = a['importance'],
                                           reasoning = a['reasoning'])
                                    av.save()
                    if a['object_type'] == 'committeemeeting':
                        if a['DELETE']:
                            try:
                                object_id = a['obj_id']
                                av = AgendaMeeting.objects.get(
                                       agenda__id=a['agenda_id'],
                                       meeting__id = a['obj_id'])
                                av.delete()
                            except AgendaMeeting.DoesNotExist:
                                pass
                        else: # not delete, so try to create
                            try:
                                object_id = a['obj_id']
                                av = AgendaMeeting.objects.get(
                                       agenda__id=a['agenda_id'],
                                       meeting__id = a['obj_id'])
                                av.score = a['weight']
                                av.reasoning = a['reasoning']
                                av.save()
                            except AgendaMeeting.DoesNotExist:
                                av = AgendaMeeting(
                                       agenda_id=int(a['agenda_id']),
                                       meeting_id=int(a['obj_id']),
                                       score = a['weight'],
                                       reasoning = a['reasoning'])
                                av.save()
                else:
                    logger.info("invalid form")

        else:
            # TODO: Error handling: what to do with illeal forms?
            logger.info("invalid formset")
            logger.info("%s" % vl_formset.errors)
        if object_type in object_redirect:
            if object_id: # return to object page
                return HttpResponseRedirect(
                        reverse(object_redirect[object_type][0],
                                kwargs={'pk':object_id}))
            else: # return to list
                return HttpResponseRedirect(reverse(object_redirect[object_type][1]))
        else:
            logger.warn('unknown object_type')
            return HttpResponseRedirect(reverse('main'))
    else:
        return HttpResponseNotAllowed(['POST'])
Esempio n. 8
0
def update_editors_agendas(request):
    if request.method == 'POST':
        object_type = request.POST.get('form-0-object_type',None)
        object_id = request.POST.get('form-0-obj_id',None)
        vl_formset = object_formset_classes[object_type](request.POST)
        if vl_formset.is_valid():
            for a in vl_formset.cleaned_data:
                if a:
                    # Check that the user is an editor of the agenda
                    # he's trying to edit
                    try:
                        agenda = Agenda.objects.get(pk=a['agenda_id'])
                        if request.user not in agenda.editors.all():
                            return HttpResponseForbidden()
                    except Agenda.DoesNotExist:
                        return HttpResponseForbidden()

                    if a['object_type'] == 'vote':
                        if a['DELETE']:
                            try:
                                object_id = a['obj_id']
                                av = AgendaVote.objects.get(
                                       agenda__id=a['agenda_id'],
                                       vote__id = a['obj_id'])
                                av.delete()
                            except AgendaVote.DoesNotExist:
                                pass
                        else: # not delete, so try to create
                            if (a['weight'] is not '' and
                                a['importance'] is not ''):
                                try:
                                    object_id = a['obj_id']
                                    av = AgendaVote.objects.get(
                                           agenda__id=a['agenda_id'],
                                           vote__id = a['obj_id'])
                                    av.score = a['weight']
                                    av.importance = a['importance']
                                    av.reasoning = a['reasoning']
                                    av.save()
                                except AgendaVote.DoesNotExist:
                                    av = AgendaVote(
                                           agenda_id=int(a['agenda_id']),
                                           vote_id=int(a['obj_id']),
                                           score = a['weight'],
                                           importance = a['importance'],
                                           reasoning = a['reasoning'])
                                    av.save()
                    if a['object_type'] == 'bill':
                        if a['DELETE']:
                            try:
                                object_id = a['obj_id']
                                av = AgendaBill.objects.get(
                                       agenda__id=a['agenda_id'],
                                       bill__id = a['obj_id'])
                                av.delete()
                            except AgendaBill.DoesNotExist:
                                pass
                        else: # not delete, so try to create
                            if (a['weight'] is not '' and
                                a['importance'] is not ''):
                                try:
                                    object_id = a['obj_id']
                                    av = AgendaBill.objects.get(
                                           agenda__id=a['agenda_id'],
                                           bill__id = a['obj_id'])
                                    av.score = a['weight']
                                    av.importance = a['importance']
                                    av.reasoning = a['reasoning']
                                    av.save()
                                except AgendaBill.DoesNotExist:
                                    av = AgendaBill(
                                           agenda_id=int(a['agenda_id']),
                                           bill_id=int(a['obj_id']),
                                           score = a['weight'],
                                           importance = a['importance'],
                                           reasoning = a['reasoning'])
                                    av.save()
                    if a['object_type'] == 'committeemeeting':
                        if a['DELETE']:
                            try:
                                object_id = a['obj_id']
                                av = AgendaMeeting.objects.get(
                                       agenda__id=a['agenda_id'],
                                       meeting__id = a['obj_id'])
                                av.delete()
                            except AgendaMeeting.DoesNotExist:
                                pass
                        else: # not delete, so try to create
                            try:
                                object_id = a['obj_id']
                                av = AgendaMeeting.objects.get(
                                       agenda__id=a['agenda_id'],
                                       meeting__id = a['obj_id'])
                                av.score = a['weight']
                                av.reasoning = a['reasoning']
                                av.save()
                            except AgendaMeeting.DoesNotExist:
                                av = AgendaMeeting(
                                       agenda_id=int(a['agenda_id']),
                                       meeting_id=int(a['obj_id']),
                                       score = a['weight'],
                                       reasoning = a['reasoning'])
                                av.save()
                else:
                    logger.info("invalid form")

        else:
            # TODO: Error handling: what to do with illeal forms?
            logger.info("invalid formset")
            logger.info("%s" % vl_formset.errors)
        if object_type in object_redirect:
            if object_id: # return to object page
                return HttpResponseRedirect(
                        reverse(object_redirect[object_type][0],
                                kwargs={'pk':object_id}))
            else: # return to list
                return HttpResponseRedirect(reverse(object_redirect[object_type][1]))
        else:
            logger.warn('unknown object_type')
            return HttpResponseRedirect(reverse('main'))
    else:
        return HttpResponseNotAllowed(['POST'])
Esempio n. 9
0
def update_editors_agendas(request):
    if request.method == "POST":
        object_type = request.POST.get("form-0-object_type", None)
        object_id = request.POST.get("form-0-obj_id", None)
        vl_formset = object_formset_classes[object_type](request.POST)
        if vl_formset.is_valid():
            for a in vl_formset.cleaned_data:
                if a:
                    # Check that the user is an editor of the agenda
                    # he's trying to edit
                    try:
                        agenda = Agenda.objects.get(pk=a["agenda_id"])
                        if request.user not in agenda.editors.all():
                            return HttpResponseForbidden()
                    except Agenda.DoesNotExist:
                        return HttpResponseForbidden()

                    if a["object_type"] == "vote":
                        if a["DELETE"]:
                            try:
                                object_id = a["obj_id"]
                                av = AgendaVote.objects.get(agenda__id=a["agenda_id"], vote__id=a["obj_id"])
                                av.delete()
                            except AgendaVote.DoesNotExist:
                                pass
                        else:  # not delete, so try to create
                            if a["weight"] is not "" and a["importance"] is not "":
                                try:
                                    object_id = a["obj_id"]
                                    av = AgendaVote.objects.get(agenda__id=a["agenda_id"], vote__id=a["obj_id"])
                                    av.score = a["weight"]
                                    av.importance = a["importance"]
                                    av.reasoning = a["reasoning"]
                                    av.save()
                                except AgendaVote.DoesNotExist:
                                    av = AgendaVote(
                                        agenda_id=int(a["agenda_id"]),
                                        vote_id=int(a["obj_id"]),
                                        score=a["weight"],
                                        importance=a["importance"],
                                        reasoning=a["reasoning"],
                                    )
                                    av.save()
                    if a["object_type"] == "bill":
                        if a["DELETE"]:
                            try:
                                object_id = a["obj_id"]
                                av = AgendaBill.objects.get(agenda__id=a["agenda_id"], bill__id=a["obj_id"])
                                av.delete()
                            except AgendaBill.DoesNotExist:
                                pass
                        else:  # not delete, so try to create
                            if a["weight"] is not "" and a["importance"] is not "":
                                try:
                                    object_id = a["obj_id"]
                                    av = AgendaBill.objects.get(agenda__id=a["agenda_id"], bill__id=a["obj_id"])
                                    av.score = a["weight"]
                                    av.importance = a["importance"]
                                    av.reasoning = a["reasoning"]
                                    av.save()
                                except AgendaBill.DoesNotExist:
                                    av = AgendaBill(
                                        agenda_id=int(a["agenda_id"]),
                                        bill_id=int(a["obj_id"]),
                                        score=a["weight"],
                                        importance=a["importance"],
                                        reasoning=a["reasoning"],
                                    )
                                    av.save()
                    if a["object_type"] == "committeemeeting":
                        if a["DELETE"]:
                            try:
                                object_id = a["obj_id"]
                                av = AgendaMeeting.objects.get(agenda__id=a["agenda_id"], meeting__id=a["obj_id"])
                                av.delete()
                            except AgendaMeeting.DoesNotExist:
                                pass
                        else:  # not delete, so try to create
                            try:
                                object_id = a["obj_id"]
                                av = AgendaMeeting.objects.get(agenda__id=a["agenda_id"], meeting__id=a["obj_id"])
                                av.score = a["weight"]
                                av.reasoning = a["reasoning"]
                                av.save()
                            except AgendaMeeting.DoesNotExist:
                                av = AgendaMeeting(
                                    agenda_id=int(a["agenda_id"]),
                                    meeting_id=int(a["obj_id"]),
                                    score=a["weight"],
                                    reasoning=a["reasoning"],
                                )
                                av.save()
                else:
                    logger.info("invalid form")

        else:
            # TODO: Error handling: what to do with illeal forms?
            logger.info("invalid formset")
            logger.info("%s" % vl_formset.errors)
        if object_type in object_redirect:
            if object_id:  # return to object page
                return HttpResponseRedirect(reverse(object_redirect[object_type][0], kwargs={"pk": object_id}))
            else:  # return to list
                return HttpResponseRedirect(reverse(object_redirect[object_type][1]))
        else:
            logger.warn("unknown object_type")
            return HttpResponseRedirect(reverse("main"))
    else:
        return HttpResponseNotAllowed(["POST"])