首页 文章

Django Ajax发布500内部错误

提问于
浏览
0

我希望你可以帮助我,我试图制作一个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(内部服务器错误)

我想也许在我看来可能缺少某些东西,买我不知道,你能帮助我吗?

编辑:添加了回溯

环境:请求方法:GET请求URL:http://127.0.0.1:8000 / coobro / agregar_concepto / Django版本:1.9.7 Python版本:2.7.11已安装的应用程序:('django.contrib.admin','django .contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','entrada','cobro','catalogo', 'selectize','smart_selects')已安装的中间件:('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 get_response中的\ site-packages \ django \ core \ handlers \ base.py“ . %(callback.module,view_name))异常类型:/ cobro / agregar_concepto上的ValueError /异常值:Th e view cobro.views.addconcept_product未返回HttpResponse对象 . 它返回了None .

3 回答

  • 0

    您查看的内容不完整:由于异常状态:视图cobro.views.addconcept_product未返回正确的HttpResponse对象 .

    return HttpResponseRedirect('/thanks/')
    
  • 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.')
    
  • 0

    用类似的东西更新你的return语句 .

    return HttpResponse('Product Created !')
    

    此外,当您使用ajax时,您还可以返回JsonResponse .

    先导入它

    from django.http import JsonResponse
    

    然后返回你的回复

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

    如果方法不是POST,并且您正在提交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'})
    

    还使用ajax方法属性而不是类型 .

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

相关问题