2016-07-15 5 views
0

私はあなたが私を助けることができます、私は助けてくれることを願っていますdjangoポストフォームを作成しようとしているが、ajaxを使用してページを再読み込みせずに私はこれを修正するために助けることができますコード:Django Ajaxポスト500内部エラー

models.py

class ProductoConcepto(models.Model): 
    producto = models.ForeignKey(Producto) 
    orden = models.ForeignKey(Cobro) 
    cantidad = models.FloatField() 

urls.py

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
from cobro import views 

urlpatterns = [ 
    url(r'^cobro/agregar_concepto/$', views.addconcept_product, name='add_concepto'), 
] 

views.py

def addconcept_product(request): 

    if request.method == 'POST': 

     if form.is_valid(): 
      producto = request.POST['producto'] 
      orden = request.POST['orden'] 
      cantidad = request.POST['cantidad'] 

      ProductoConcepto.objects.create(producto=producto, orden=orden, cantidad=cantidad) 

      return HttpResponse('') 

テンプレート

<div class="modal inmodal fade" id="myModal1" tabindex="-1" role="dialog" aria-hidden="true"> 
      <div class="modal-dialog modal-m"> 
       <div class="modal-content"> 
        <div class="modal-header"> 
         <button type="button" class="close" data-dismiss="modal"> 
          <span aria-hidden="true">&times;</span> 
          <span class="sr-only">Cerrar</span> 
         </button> 
         <h3 class="modal-title">Agregar nuevo concepto</h3> 
        </div> 
        <div class="modal-body"> 
         <p>Datos de concepto a agregar:</p> 
         <div class="doctorformstyle"> 
         <form id='formulario-modal' method='post' enctype='multipart/form-data'> 
          {% csrf_token %} 
          <ul>{{form2.as_p}}</ul> 

<!-- rendered form2 fields: <select id="id_producto" name="producto"><option value="1" selected="selected">object</option></select> --> 
<!-- form2 fields: <select id="id_orden" name="orden"> 
<option value="1" selected="selected">object</option> 
</select> --> 
<!-- form2 fields: <input id="id_cantidad" name="cantidad" step="any" type="number"> --> 

          <div class="row align-center"> 
           <input type='submit' name="save1" value='Guardar' class="btn btn-w-m btn-primary"/> 
          </div> 

         </form> 
</div> 
        </div> 
       </div> 
      </div> 
     </div> 

<script type="text/javascript"> 
    $(document).on('submit', '#formulario-modal', function(e){ 
      e.preventDefault(); 
      $.ajax ({ 
       type: 'POST', 
       url: '{% url 'add_concepto' %}', 
       data: { 
        producto: $('#id_producto').val(), 
        orden: $('#id_orden').val(), 
        cantidad: $('#id_cantidad').val(), 
        csrfmiddlewaretoken: '{{ csrf_token }}', 
       }, 
       sucess:function(){ 
        alert("OK"); 
       } 
      }) 
    }); 

</script> 

これでエラー:POST http://127.0.0.1:8000/cobro/agregar_concepto/ 500(内部サーバーエラー)私は多分何かが私の見解では欠けている、私は、あなたが私を助けるCALことを知らない買うことを考えて

編集:トレースバックは、あなたが閲覧

Environment:

Request Method: GET Request URL: http://127.0.0.1:8000/cobro/agregar_concepto/

Django Version: 1.9.7 Python Version: 2.7.11 Installed Applications: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'entrada', 'cobro', 'catalogo', 'selectize', 'smart_selects') Installed Middleware: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware')

Traceback:

File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 158. % (callback.module, view_name))

Exception Type: ValueError at /cobro/agregar_concepto/ Exception Value: The view cobro.views.addconcept_product didn't return an HttpResponse object. It returned None instead.

+0

を完全なエラー・トレースバックを表示してください。私はいくつかの例外が発生していると思う。 – kapilsdv

+0

確かに、私は投稿を編集しました。 –

+0

それでは、あなたが戻ってきていないというエラーから、ビューからは何も外れません。それが例外と500のステータスを取得している理由です。戻り値HttpResponse( 'Product Created!') – kapilsdv

答えて

0

を追加して完全なものではありません:例外状態として :ビューcobro.views.addconcept_productは、適切HttpResponseオブジェクトを返しませんでした。

return HttpResponseRedirect('/thanks/') 
+0

私は見ていますが、この場合はリダイレクトやページのリロードを避けるためにajaxを使用していますので、依然としてレスポンスオブジェクトが必要ですか?またはそのために私のスクリプトで投稿が不足している –

+0

有効なHttpResponseまたはJsonResponseを返さなければならない – acidjunk

0

返信文を次のように更新します。

return HttpResponse('Product Created !') 

また、あなたはajaxを使用しているときに、JsonResponseを返すこともできます。その後、

まず輸入は

from django.http import JsonResponse 

とメソッドがPOSTでない場合は、条件を処理していないため、例外が発生しつつある、とあなたが提出されている

JsonResponse({'success': 'Product created'}) 

あなたの応答を返しますGETリクエスト。

無効なフォームのケースを処理し、メソッドがPOSTではない場合は処理します。

def addconcept_product(request): 

if request.method == 'POST': 

    if form.is_valid(): 
    .... 

     return JsonResponse({'success': 'Product created'}) 
    else: 
     return JsonResponse({'error': 'InValid Form.Product Creation Failed'}) 
else: 
    return JsonResponse({'error': 'Only POST method allowed'}) 

また、typeではなくajaxメソッド属性を使用します。

$.ajax ({ 
      method: 'POST', 
      url: '{% url 'add_concepto' %}', 
    .... 
    }); 
+0

回答してくれてありがとう、私はそれを試みたが、私は同じ例外がある。 –

+0

JsonResponseで試しましたか? – kapilsdv

+0

また、あなたのメソッドがポストでない場合は、 'else:JsonResponse({'error': '投稿のみが許可されているように、ajax' type:' POST '、 'attribute:' method:' POST ' '}) ' – kapilsdv

0

あなたが新しいウィンドウで提供した例外を表示していますか? 「リクエストメソッド:GET」が表示されているため、これはあなたのajax関数では起こってはいけません。

はこれにあなたのビューを変更します。

def addconcept_product(request): 

    if request.method == 'POST': 

     if form.is_valid(): 
      producto = request.POST['producto'] 
      orden = request.POST['orden'] 
      cantidad = request.POST['cantidad'] 

      ProductoConcepto.objects.create(producto=producto, orden=orden, cantidad=cantidad) 

      return HttpResponse('Product Created') 
     else: 
      return HttpResponse('Product Creation failed') 
    else: 
     return HttpResponse('Failed: Post requests only.') 
関連する問題