表中的复选框和值发布

时间:2014-11-03 14:22:47

标签: python html django post checkbox

我是django的新手,我希望将一个视图中的复选框值POST到另一个视图。

这是片段:

当我检查表格行中的两个复选框时,我只有一个值(来自Django调试窗口):

Variable                   Value

csrfmiddlewaretoken        u'6i8aRyhvTq29EOy6sfffzPtKy9jXUsVi'
Login                      u'jhgjghj'

但是帖子对象应该是:

Variable                   Value

csrfmiddlewaretoken        u'6i8aRyhvTq29EOy6sfffzPtKy9jXUsVi'
Login                      u'jhgjghj'
Login                      u'sdfsfd'  (the second object not posted)

另外我还有第二个问题。

这是我传递这些POST数据的视图:

def deleteObjects(request):
template = 'delObj.html'
objects = []
for obj in request.POST.items():
    if obj('Login'):
        todelete = Login.objects.get(obj('Login'))
        objects.append(todelete)
context = {'objects' : objects}
return render(request, template, context)

我收到错误"元组对象不可调用" (对于行obj('名称')=='登录' :),但我无法理解原因。 Aren的POST数据元素是类似dict的对象的KEY和VALUE吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

是的,POST是一个类似dict的对象,但你似乎对这些工作方式存在误解。 items()为dict中的每个项返回一个(key,value)元组 - 因此,例如,obj将为('Login', 'jhghghj')。所以说obj('Login')是没有意义的:obj不可调用,也不能通过dict表示法访问(这将是obj['login'])。相反,你会想要这个:

for key, value in request.POST.items():
   if key == 'Login':
       todelete = Login.objects.get(value)

然而,在这里,我们遇到了您的第一个问题,我无法理解您为什么要进行迭代。就像你说的那样,request.POST是一个类似于dict的对象,你需要一个密钥Login。所以通常你只需通过Login得到request.POST['Login']的值 - 除了你有Login的两个值,并且POST只是dict-like而不是dict的原因是它为这个用例定义了一个getlist方法。所以,这就是你想要的:

for value in request.POST.getlist('Login'):
    todelete = Login.objects.get(value)