正确分析服务器sid上的数组输入

2024-04-19 16:06:31 发布

您现在位置:Python中文网/ 问答频道 /正文

环境:-

Odoo 9, Python 2.7

我有一个HTML表单,如下所示:

客户零件:-

<form method="POST">
    <input type="text" name="series[1234][name]" />
    <input type="text" name="series[1234][value]" />
    <input type="text" name="series[1235][name]" />
    <input type="text" name="series[1235][value]" />
    <input type="submit" />
</form>

服务器零件:-

import http
# Other Imports


class Demo(http.Controller):
   @http.route([
        '/readable/url',
    ], type='http', auth="user", website=True)
    def readable_url(self, **request):
        # I am getting this

        # {
        #      'series[1234][name]' = 123,
        #      'series[1234][value]' = 22,
        #      'series[1235][name]' = 43,
        #      'series[1235][value]' = 4434,
        #  }


       # But I want like this

       # series = {
       # '1234' = {'name' = 123, 'value' = 22},
       # '1235' = {'name' = 43, 'value' = 4434},
       # }

我可以根据我的需要转换此请求,但请告诉我是否有任何预定义的方法来转换此请求。你知道吗


Tags: textnameodooformhttpurl表单input
1条回答
网友
1楼 · 发布于 2024-04-19 16:06:31

这里有关于github或npm的解

$ npm install form-serializer

复制/dist/jquery.serialize-object.min.js文件内置模块结构

addons/<my_module_name>/
|  __init__.py
|  __openerp__.py
|  controllers/
|    |  __init__.py
|    `  main.py
|  static/
|    |  lib/
|    |    `  jquery.serialize-object.min.js
|    `  src/
|        `  js/
|             `  yourJsModule.js
`  views/
    |  templates.xml
    |  assets.xml

你知道吗资产.xml(安装lib和静态文件)

<template id="assets_frontend" inherit_id="website.assets_frontend">
  <xpath expr="." position="inside">
    <script type="text/javascript" src="/<my_module_name>/static/lib/jquery.serialize-object.min.js"></script>
    <script type="text/javascript" src="/<my_module_name>/static/src/js/yourJsModule.js"></script>
  </xpath>
</template>

你知道吗模板.xml你知道吗

<template id="index">
    <t t-call="website.layout">
        <t t-set="title">Demo</t>
        <div class="container">
            <form role="form" id="myform" class="form-horizontal">
                <div class="form-group">
                    <label for="ProductName">
                    Series 1234 name
                </label>
                    <input class="form-control" type="text" name="series[1234][name]" />
                </div>
                <div class="form-group">
                    <label for="ProductName">
                    Series 1234 value
                </label>
                    <input class="form-control" type="text" name="series[1234][value]" />
                </div>
                <div class="form-group">
                    <label for="ProductName">
                    Series 1235 name
                </label>
                    <input class="form-control" type="text" name="series[1235][name]" />
                </div>
                <div class="form-group">
                    <label for="ProductName">
                    Series 1235 value
                </label>
                    <input class="form-control" type="text" name="series[1235][value]" />
                </div>
                <input type="button" value="sumbit" id="mysumbit"/>
            </form>
        </div>
    </t>
</template>

你知道吗你的jsmodule.js你知道吗

odoo.define('yourJsModule', function (require) {
    'use strict';
    var ajax = require('web.ajax');

    $(function () {
        if ($('#myform').length) {
            $('#mysumbit').on('click', function () {
                var jsondata = $('#myform').serializeObject();
                ajax.jsonRpc('/demo/json', 'call', jsondata).done(function (data) {
                    // your code here 
                    // location.reload();
                });
            })
        }
    });
});

你知道吗主.py你知道吗

# -*- coding: utf-8 -*-
from openerp import http

class MyModule(http.Controller):
    @http.route('/demo/index', auth='public', website=True)
    def index(self, **kw): 
        ## your code here init function
        return http.request.render("convert_form_data_to_json_demo.index", {})

    @http.route('/demo/json/', auth='public', type='json', website=True, method=['POST'])
    def post_data(self, **post): 
        ## your code here 
        return post

注意:在这种情况下,“1234”“1235”将成为一个数组

相关问题 更多 >