2015-10-07 65 views
-1

我试图从Django中的表单发布数据,当我点击提交它不进入POST。我已经使用Django完成了一些POST,并且它们工作正常。在这里,第一次渲染模板进入NO POST,这是正确的。但是,当提交表单时,它表示“无效”。Django窗体无效

urls.py

url(r'^traps/view/', 'servicios.views.viewtraps'), 

forms.py

class LimitQueryForm(forms.Form): 

    limit = forms.CharField(label='Nº de Resultados a Mostrar', max_length=250) 

模板

<form action="/services/traps/view/" method="post">{% csrf_token %} 
    {{ form_limit }} 
    <button type="submit" value="btn_limit_val" name="btn_limit_name">Aceptar</button>  
</form> 

六ews.py

def viewtraps(request): 

    connect_mysql = mdb.connect(*) 
    cursorMYSQL = connect_mysql.cursor(mdb.cursors.DictCursor) 
    cursorMYSQL.execute("""select eventname,eventid,trapoid,enterprise,community,hostname,agentip,category,severity,uptime,traptime,formatline,timestamp from snmptt order by id desc limit 500""") 
    b = cursorMYSQL.fetchall() 
    connect_mysql.close() 

    form_limit = LimitQueryForm() 

    if request.method == 'POST': 

     if form_limit.is_valid(): 

      limit = "VALID" 

      dictionary = RequestContext(request, {"buffer_data": b, "form_limit": form_limit, "limit": limit}) 
      return render_to_response("viewtraps.html", dictionary) 

     else: 

      limit = "NOT VALID" 

      dictionary = RequestContext(request, {"buffer_data": b, "form_limit": form_limit, "limit": limit}) 
      return render_to_response("viewtraps.html", dictionary) 

    else: 

     limit = "NO POST" 

     dictionary = RequestContext(request, {"buffer_data": b, "form_limit": form_limit, "limit": limit}) 
     return render_to_response("viewtraps.html", dictionary) 

我知道一些用户告诉我,我不应该使用Django这样,还有为什么我做这种方式的原因,请避免评论,由于这不是问题马上。谢谢!

+0

什么'form_limit.errors'说? – Sayse

+0

你是说如果我把它放在这里我得到了什么? '<形式行动= “/服务/陷阱/视图/” 方法= “POST”> {%csrf_token%} {{form_limit.errors}} {{form_limit}} <按钮类型=“提交“value =”btn_limit_val“name =”btn_limit_name“> Aceptar ' –

+0

或者只是检查您的调试器窗口... theres表单上的一个字段,说明有什么错误。最有可能的原因是您的表单限制是表单的新实例,没有您的任何值传入它 – Sayse

回答

0

问题在于form_limit的初始化,它是在不读取请求参数的情况下创建的。尝试改为:

if request.method == 'POST': 
    form_limit = LimitQueryForm(request.POST) 
    ... 
else: 
    form_limit = LimitQueryForm() 

参考:https://docs.djangoproject.com/en/1.8/topics/forms/#the-view

+0

谢谢!!它的工作! –

0

清洁..

def viewtraps(request): 
    # ... db connections   
    form_limit = LimitQueryForm(request.POST or None) #<--- this was your typo 
    if form_limit.is_valid(): 
     limit = "VALID" 
     dictionary = RequestContext(request, {"buffer_data": b, "form_limit": form_limit, "limit": limit}) 
     return render_to_response("viewtraps.html", dictionary) 
    else: 
     limit = "NOT VALID" 
     dictionary = RequestContext(request, {"buffer_data": b, "form_limit": form_limit, "limit": limit}) 
     return render_to_response("viewtraps.html", dictionary) 

    dictionary = RequestContext(request, {"buffer_data": b, "form_limit": form_limit, "limit": limit}) 
    return render_to_response("viewtraps.html", dictionary) 
+0

谢谢!!它的工作! –