【发布时间】:2015-09-29 09:47:02
【问题描述】:
我正在尝试将模板表单中的数据插入 MySQL 数据库,但它不起作用。
形式:
class AddPollForm(forms.Form):
poll_time = forms.CharField(label='Tiempo Poll', max_length=10)
poll_ip = forms.CharField(label='IP', max_length=50)
communitydata = forms.CharField(label='Community Data', max_length=100)
snmp_oid = forms.CharField(label='OID', max_length=250)
lastcheck = forms.CharField(label='Última Comprobación', max_length=20)
我在模板中的表单:
<form action="/services/listpolls/" method="post">{% csrf_token %}
{{ form }}
<input type="submit" id="add" value="Añadir">
</form>
意见:
@csrf_exempt
def listpolls(request):
connect_mysql = mdb.connect('****', '***', '***', 'noname_jc_sandbox')
cursorMYSQL = connect_mysql.cursor(mdb.cursors.DictCursor)
query = "select id,ip,polling_time,communitydata,snmp_oid,lastcheck from snmptt_listpolls order by ip desc limit 100"
cursorMYSQL.execute(query)
b = cursorMYSQL.fetchall()
connect_mysql.close()
if request.method == 'POST':
form = AddPollForm(request.POST)
if form.is_valid():
poll_time = form.cleaned_data['poll_time']
ip = form.cleaned_data['poll_ip']
connect_mysql = mdb.connect('***', '***', '***', 'noname_jc_sandbox')
cursorMYSQL = connect_mysql.cursor(mdb.cursors.DictCursor)
cursorMYSQL.execute("insert into snmptt_listpolls (ip, polling_time) values (34, 34)")
connect_mysql.commit()
connect_mysql.close()
return HttpResponseRedirect('listpolls.html')
else:
form = AddPollForm()
return render_to_response("listpolls.html",{"buffer_data": b, 'form': form} )
else:
form = AddPollForm()
return render_to_response("listpolls.html",{"buffer_data": b, 'form': form} )
在这里,我们从数据库中获取数据并将其显示在表格中,效果很好。我也有表格,当我按添加时,我想向数据库添加另一行。
字段的类型有:
| id | int(11) | NO | PRI | NULL | auto_increment |
| ip | varchar(50) | NO | | NULL | |
| polling_time | int(10) | NO | | NULL | |
| communitydata | varchar(100) | NO | | NULL | |
| snmp_oid | varchar(250) | YES | | NULL | |
| lastcheck | datetime
【问题讨论】:
-
说“它不起作用”并不是很有帮助。哪个部分不工作?如果在表单无效时从 else 语句中删除
form = AddPollForm(),则模板应显示任何表单错误。 -
如果您要手动生成每个查询,那么使用 django 毫无意义,您可以忽略它!即使您想偶尔运行原始 sql,您仍然可以在管理器中使用 raw() 方法。
-
我在该用户的上一个问题中同时提出了 Alasdair 和 e4c5 的观点。不幸的是,目前还不清楚她想要做什么。
-
另外,它比之前暗示的更糟糕,因为您现在在一个视图中打开和关闭数据库连接两次。这是,不要说得太细了,废话。
-
这里为什么不能使用django ORM?您可以在设置中定义多个数据库并使用
managed=False创建模型,这意味着django 不会触及模型对应的表结构。