Проблемы в JS оказались мелочью. В общем я немного порефакторил, но нашел несколько грубых ошибок.
try:
chosen_items = simplejson.loads(request.GET['chosen_items'])
except:
return HttpResponse(status=400)
Вот только из-за этого можно сразу удалять приложение. По вашей логике вы конечно решаете все проблемы сразу, но на практике просто подсовываете бомбу замедленного дейтсвия.
poll = Poll.objects.get(pk=poll_pk)
item = Item.objects.get(pk=item_pk)
Ну сдесь вообще 500 получить не проблемы. Мы забыли сказать, что придерживаемся принципа - 500 никогда не должна возникать.
if isinstance(request.user, AnonymousUser):
Чем вам User.is_authenticated не подошел? А если мы переопределим можель анонимного пользователя через 1-10 лет? Не зря же продумывают API классов и потом поддерживают его.