2010-09-07 13 views
2

我似乎无法找出一个好办法做到这一点,Django,从表单保存数据,而不必手动设置每个字段保存?

我有一堆表单输入字段,而不是像下面那样,我必须输入每个fieldname =“”等等,有没有一种方法来编码,以便自动保存表单中的每个字段?

b = Modelname(fieldname=request.POST['fieldname']) 
b.save() 

我知道这个安全问题,但可以通过通过检查有效形式值列表运行它被否定。

+1

+1 - 考虑幸运的马尔泰利先生回答了你的问题..大风扇 – Perpetualcoder 2010-09-07 00:41:46

+0

酷,是的,我很高兴:) – Rick 2010-09-07 02:25:51

+1

Django自动为你管理所有这些 - 包括验证 - 通过它的form.Form和'form.ModelForm'类。 – 2010-09-07 06:15:27

回答

3

当然,request.POST.items()request.POST.iteritems()的工作就像在一个字典中同名的方法,返回resp。该类似对象的对象中的所有(name, value)对(2项元组)的列表和迭代器。如果名称有多个值,那只会给你最后一个值;如果你想要所有这些,使用request.POST.iterlists(),它们在每对的value插槽中具有该名称的字段的所有值的列表

因此,例如假设你不关心重复或不知道有没有,甚至片断短:

for name, value in request.POST.iteritems(): 
    ModelName(**dict([ (name, value) ])).save() 

可能就够了,虽然这肯定是更好地添加一些验证在以这种方式保存之前检查名称/值对;-)。

+0

谢谢,我一直在摸索这一段时间,我知道必须有一些优雅的方式来做到这一点,但不能拿出它是什么..谢谢,会给它一个尝试 – Rick 2010-09-07 02:27:02

+0

我试着这个,但我得到一个错误:“字典更新序列元素#0长度为16; 2是必需的”不知道这是指什么,我用我的模型名称替换ModelName ....我只有2个字段,我输入和他们的值都有超过2个字符在他们(只是基本的varchar字段),所以我有点困惑这个 – Rick 2010-09-07 02:51:18

+0

编辑:误读之前的错误信息,应该说我的领域的价值小于16,(它像6字符)它似乎在说它的16) - 另外,为了澄清,我尝试返回该循环中的第一个值和名称(以检查输出),并且都正确输出,因为输入字段和它的值,但我仍然收到此错误消息 – Rick 2010-09-07 03:00:57