【问题标题】:Controller ODOO for create Sales Order with JSON控制器 ODOO 用于使用 JSON 创建销售订单
【发布时间】:2020-03-22 20:59:23
【问题描述】:

你好,这个控制器工作正常。

class Jsontest(http.Controller):
    @http.route('/api/testjson', auth='public', csrf=False, type='json', methods=['POST'])
    def recive_json(self, **kw):
        result_insert_record = http.request.env['sale.order'].sudo().create({
            'name': 'test sale order 4',
            'partner_id': 20,
            'order_line': [
                    (0, 0, {
                    'product_id': 28, #el id en tabla product va al de product_template 
                    'product_uom_qty':2}), 

                    (0, 0, {
                    'product_id': 27, 
                    'product_uom_qty':2})]      
            })
        return result_insert_record

我需要为每个参数 (kw) 发送一个 json。

我将控制器更改为

class Jsontest(http.Controller):
    @http.route('/api/testjson', auth='public', csrf=False, type='json', methods=['POST'])
    def recive_json(self, **kw):
        result_insert_record = http.request.env['sale.order'].sudo().create(kw)
        return result_insert_record

并发送此 json 并运行。

JSON:

{ "params": { 
    "name": "test sale order 6",
    "partner_id": 20
}
}

回复:

{
    "jsonrpc": "2.0",
    "id": null,
    "result": "sale.order(36,)"
}

现在问题来了,当我想用​​线条创建订单时

我已经尝试过这个 json 序列,但它给了我以下错误

json

{ "params": { 
    "name": "test sale order 7",
    "partner_id": 20,
    "order_line": [
        {
            "product_id": 28, 
            "product_uom_qty":22
        }

    ]
}
}

错误

{
    "jsonrpc": "2.0",
    "id": null,
    "error": {
        "code": 200,
        "message": "Odoo Server Error",
        "data": {
            "name": "builtins.KeyError",
            "debug": "Traceback (most recent call last):\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 653, in _handle_exception\n    return super(JsonRequest, self)._handle_exception(exception)\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 312, in _handle_exception\n    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\tools\\pycompat.py\", line 87, in reraise\n    raise value\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 695, in dispatch\n    result = self._call_function(**self.params)\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 344, in _call_function\n    return checked_call(self.db, *args, **kwargs)\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\service\\model.py\", line 97, in wrapper\n    return f(dbname, *args, **kwargs)\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 337, in checked_call\n    result = self.endpoint(*a, **kw)\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 939, in __call__\n    return self.method(*args, **kw)\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\http.py\", line 517, in response_wrap\n    response = f(*args, **kw)\n  File \"c:\\users\\gustavo\\desktop\\custom_addons\\jsontest\\controllers\\controllers.py\", line 10, in recive_json\n    result_insert_record = http.request.env['sale.order'].sudo().create(kw)\n  File \"c:\\program files (x86)\\odoo 11.0\\server\\odoo\\addons\\sale\\models\\sale.py\", line 302, in create\n    result = super(SaleOrder, self).create(vals)\n  File \"c:\\program files (x86)\\odoo 11.0\\server\\odoo\\addons\\mail\\models\\mail_thread.py\", line 237, in create\n    thread = super(MailThread, self).create(values)\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\models.py\", line 3426, in create\n    record = self.browse(self._create(old_vals))\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\models.py\", line 3573, in _create\n    field.write(self.with_context(rel_context), vals[name], create=True)\n  File \"C:\\Program Files (x86)\\Odoo 11.0\\server\\odoo\\fields.py\", line 2300, in write\n    if act[0] == 0:\nKeyError: 0\n",
            "message": "0",
            "arguments": [
                0
            ],
            "exception_type": "internal_error"
        }
    }
}

有没有人知道 JSON 应该是什么样子才能创建带有线条的订单?

谢谢!!!

【问题讨论】:

  • 仅添加了虚拟参考,“order_line”:[[0, 0, { 'name': self.product_delivery_timesheet3.name, 'product_id': self.product_delivery_timesheet3.id, 'product_uom_qty': 5 , 'product_uom': uom_days.id }]]
  • 在创建对象时添加了所有必需的值。尝试这样做。
  • 感谢@DipenShah,只需将 json 更改为:{ "params": { "name": "test sale order 24", "partner_id": 20, "order_line": [ [ 0, 0, { "product_id": 28, "product_uom_qty": 5 } ], [ 0, 0, { "product_id": 27, "product_uom_qty": 3 } ] } } 并且有效
  • 很高兴为您提供帮助。

标签: arrays json controller odoo odoo-11


【解决方案1】:

谢谢只把json改成:

{
    "params": 
    { 
        "name": "test sale order 24",
        "partner_id": 20,
        "order_line": 
        [
            [
                0,
                0,
                {
                    "product_id": 28, 
                    "product_uom_qty": 5
                }
            ],
            [
                0,
                0,
                {
                    "product_id": 27, 
                    "product_uom_qty": 3
                }
            ]
        ]
    }
}

并且有效

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多