【问题标题】:How to change values/types of Dictionary and put them back如何更改字典的值/类型并将它们放回去
【发布时间】:2013-12-11 09:46:02
【问题描述】:

我有一个捕获用户详细信息的表单,在这个表单上我有许多单选按钮组,其值为 truefalse。而且我还有多选框,我需要将其转换为列表。

我想在序列化为 JSON 并将它们发送到服务器端之前将这些字段转换为布尔值和列表。目前我正在服务器端转换这些值。

当我序列化它时,它会发送 NestedMultiDict,它是一个元组列表字典。 我需要将单选按钮(当前为字符串)的值转换为布尔值,并将多选的值放在一个列表中。 这就是我目前的做法:

jQuery/AJAX:

$("button").click(function(e) {
            e.preventDefault();
            $("input,select,textarea").jqBootstrapValidation();
            var url = "{{'candidates.json'|route_url}}";
            var data = $("form[name=modify]").serialize();

            console.log(data);
            //console.log(data);
            $.post(url, data).success(function() {
                update_messages();
            }).error(function() {
                console.log(url);
                alert("failed");
            });
        });

Python:

def getBool(**d):
        for k,v in d.iteritems():
            if v == "True":
                d[k] = True            
                print "true",d[k]
            elif v == "False":
                d[k] = False
                print "false",d[k]
        return d

当我需要将多选值放入列表并放回字典时,问题就出现了。我不知道如何转换这些值,然后将它们放回字典中。

可以这样做吗?如果是这样,我怎么能做到这一点?

作为一个附带问题:最有效的方法是什么?

【问题讨论】:

    标签: jquery python json dictionary


    【解决方案1】:

    我稍微更改了我的 bool 函数,使其看起来像:

    def bool(boolean):
        if boolean == "True":
            return True
        else:
            return False
    

    现在在我处理通过 Ajax 请求发送的序列化数据的 Python 函数中,我只是这样做:

    if self.context.relocate:
                self.context.relocate = bool(self.context.relocate)
    

    我发现我不需要把它放回NestedMultiDict,因为self.context处理应该插入数据库的数据。所以现在我将数据保存到数据库中,而不用担心将数据放回字典中......

    我使用了一个名为Pyramid 的框架与MongoDBMongoEngine(只是为了让上面的代码更有意义)。

    我希望这可以帮助某人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-24
      • 2016-01-11
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      相关资源
      最近更新 更多