2014-01-18 6 views
0

Я получаю MultiValueDictKeyError, когда пытаюсь использовать request.POST['my_variable_from_jquery_post'] для просмотра. Я понятия не имею, как обойти это, я много пробовал. Я использую django 1.6. Помощь будет оценена по достоинству.Невозможно отправить переменные .post в django view

HTML

<script> 
$(function(){ 
    $('.add').click(function(){ 
     var id = $(this).attr('id'); 
     $.post("{% url 'myapp.views.add_bet' %}", {off_id: id,}); 
    }); 
}); 
</script> 

<form action="{% url 'myapp.views.add_bet' %}" method="post"> 
    {% csrf_token %} 
    <button class="btn btn-default add" id="{{offer.id}}" >Add &raquo;</button> 
</form> 

Посмотреть

def add_bet(request): 
    off_id=request.POST['off_id'] #doesn't work, throws MultiValueDictKeyError 
    offer=Offer.objects.get(pk=1) #the rest works, if I set pk=1, the bet saves 
    b=Bet(offer=offer, user=request.user, submitted=False) 
    b.save() 
    return redirect('myapp.views.index') 
+0

Вы уверены, что вы получаете правильный вызов Ajax ? Также '' {{offer.id}} 'правильно отображается? Попробуйте поместить 'preventDefault()' в ваш обратный вызов 'click'. – mariodev

+0

Вы могли бы опубликовать выступление 'request.POST' из вашего представления' add_bet'. – Amyth

ответ

1

Это будет работать для вас ..

<script type="text/javascript"> 
    var frm = $('#FORM-ID'); 
    frm.submit(function() { 
     $.ajax({ 
      type: frm.attr('method'), 
      url: frm.attr('action'), 
      data: frm.serialize(), 
      success: function (data) { 
       $("#SOME-DIV").html(data); 
      }, 
      error: function(data) { 
       $("#MESSAGE-DIV").html("Something went wrong!"); 
      } 
     }); 
     return false; 
    }); 
</script> 

<form action="{% url 'myapp.views.add_bet' %}" method="post" id="#FORM-ID"> 
{% csrf_token %} 
<input type="hideden" name="off_id" value="{{offer.id}}"> 
<button class="btn btn-default add" type="submit" >Add &raquo;</button> 
</form> 


def add_bet(request): 
    off_id=request.POST.get('off_id',None) 
    b=Bet(offer=offer, user=request.user, submitted=False) 
    b.save() 
    return redirect('myapp.views.index') 
+0

Yo спасибо мужу - добавление скрытого ввода, а затем переход на событие .submit с данными: {'off_id': id} работает , Я предполагаю, что serialize() работает тоже, но я не совсем понимаю его, так что он явно – amchugh89

Смежные вопросы