【问题标题】:Checkboxes in a table and values post表中的复选框和值发布
【发布时间】:2014-12-30 05:18:42
【问题描述】:

我是 django 新手,我希望将复选框值从一个视图发布到另一个视图。

这是sn-p:

当我检查表行中仅有的两个复选框时,我只有一个值(来自 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)

我收到一个错误“元组对象不可调用”(对于该行 if obj('name') == 'Login':),但我不明白为什么。 POST 数据元素不是 dict-like 对象的 KEY 和 VALUE 吗?

提前致谢

【问题讨论】:

    标签: python html django post checkbox


    【解决方案1】:

    是的,POST 是一个类似字典的对象,但您似乎对它们的工作方式有误解。 items() 为字典中的每个项目返回一个 (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 是一个类似字典的对象,你想要一个键,Login。所以通常你会简单地通过request.POST['Login'] 获得Login 的值——除了Login 有两个值,POST 只是类似字典而不是实际字典的原因是它定义了一个getlist正是这个用例的方法。所以,这就是你想要的:

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

    【讨论】:

    • 您在字典中是对的,键是唯一的。具体来说,我想识别通过 POST 请求传递的对象的类型,因此接收对象的视图可以识别模型(此视图必须显示“您确定要删除这些对象吗?”,在这种情况下模型是“登录” ),但我认为我必须为要删除对象的每个模型编写一个视图,并省略复选框的“名称”。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 2013-05-21
    • 2019-11-24
    • 2012-07-24
    • 1970-01-01
    • 2013-10-14
    • 2017-10-04
    • 2014-11-30
    相关资源
    最近更新 更多