【问题标题】:Odoo PoS not showing custom field valueOdoo PoS 未显示自定义字段值
【发布时间】:2020-07-02 19:36:16
【问题描述】:

我创建了一个模块,该模块使用 python 文件和 javascript 文件将一些自定义字段添加到 res.partner 模型和 PoS 合作伙伴。我知道两者都正常工作,因为当我在字段中编写一些内容时,记录会在后端更新。 问题是 PoS 不显示字段值。 添加字段的python文件格式如下:

# -*- coding: utf-8 -*-

from odoo import models, fields, api

class MyModulePartner(models.Model):
    _inherit = 'res.partner'

    billing_name = fields.Char(string='Billing name')
    billing_number = fields.Char(string='Billing number')

javascript 文件的格式如下:

odoo.define('my_module.partner', function (require) {
"use strict";

   var models = require('point_of_sale.models');
   var _super_posmodel = models.PosModel.prototype;

   models.PosModel = models.PosModel.extend({
   initialize: function (session, attributes) {
      var partner_model = _.find(this.models, function(model) {
           return model.model === 'res.partner';
      });
      partner_model.fields.push(['billing_name', 'billing_number']);
      return _super_posmodel.initialize.call(this, session, attributes);
      },
   });
});

然后我添加了带有文件“views/computerized_pos_assets_template.xml”的javascript文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<odoo>

   <template id="assets" inherit_id="point_of_sale.assets">
      <xpath expr="." position="inside">
         <script type="text/javascript" src="/my_module/static/src/js/partner.js"></script>
      </xpath>
   </template>

</odoo>

尝试使用以下代码更改文件“static/src/xml/computerized_pos.xml”的 pos 视图:

<?xml version="1.0" encoding="UTF-8"?>
<template xml:space="preserve">

    <t t-extend="ClientDetailsEdit">
        <t t-jquery=".client-details-left" t-operation="replace">
            <div class='client-details-left'>
                <div class='client-detail'>
                    <span class='label'>Razón</span>
                    <input class='detail client-billing-name'           name='billing_name'     t-att-value='partner.billing_name || ""'></input>
                </div>
                <div class='client-detail'>
                    <span class='label'>Tax ID</span>
                    <input class='detail vat'           name='vat'     t-att-value='partner.vat || ""'></input>
                </div>
                <div class='client-detail'>
                    <span class='label'>Barcode</span>
                    <input class='detail barcode'       name='barcode'    t-att-value='partner.barcode || ""'></input>
                </div>
                <div class='client-detail'>
                    <span class='label'>Correo</span>
                    <input class='detail client-email'  name='email'    type='email'    t-att-value='partner.email || ""'></input>
                </div>
            </div>
        </t>
   </t>

<t t-extend="ClientDetails">
        <t t-jquery=".client-details-left" t-operation="replace">
            <div class='client-details-left'>
                <div class="client-detail">
                    <span class="label">Razón</span>
                    <t t-if='partner.billing_name'>
                        <span class="detail client-billing-name"><t t-esc="partner.billing_name"/></span>
                    </t>
                    <t t-if='!partner.billing_name'>
                        <span class="detail client-billing-name empty">N/A</span>
                    </t>
                </div>
                <div class='client-detail'>
                    <span class='label'>Barcode</span>
                    <t t-if='partner.barcode'>
                        <span class='detail client-id'><t t-esc='partner.barcode'/></span>
                    </t>
                    <t t-if='!partner.barcode'>
                        <span class='detail client-id empty'>N/A</span>
                    </t>
                </div>
                <div class='client-detail'>
                    <span class='label'>Correo</span>
                    <t t-if='partner.email'>
                        <span class='detail client-email'><t t-esc='partner.email' /></span>
                    </t>
                    <t t-if='!partner.email'>
                        <span class='detail client-email empty'>N/A</span>
                    </t>
                </div>
            </div>
        </t>
   </t>

最后在清单文件中,我添加了如下文件:

'data': [
        'views/computerized_pos_assets_template.xml',
    ],
    'qweb': [
        'static/src/xml/computerized_pos.xml',
    ],

我注意到的是,当在“views/computerized_pos_assets_template.xml”中详细说明 javascript 文件位置时,例如“/my_module/static/src/js/partner.js”,Odoo 会引发以下错误:

Traceback (most recent call last):
  File "/opt/odoo/odoo13/odoo/http.py", line 619, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/opt/odoo/odoo13/odoo/http.py", line 309, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/opt/odoo/odoo13/odoo/tools/pycompat.py", line 14, in reraise
    raise value
  File "/opt/odoo/odoo13/odoo/http.py", line 664, in dispatch
    result = self._call_function(**self.params)
  File "/opt/odoo/odoo13/odoo/http.py", line 345, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/opt/odoo/odoo13/odoo/service/model.py", line 93, in wrapper
    return f(dbname, *args, **kwargs)
  File "/opt/odoo/odoo13/odoo/http.py", line 338, in checked_call
    result = self.endpoint(*a, **kw)
  File "/opt/odoo/odoo13/odoo/http.py", line 910, in __call__
    return self.method(*args, **kw)
  File "/opt/odoo/odoo13/odoo/http.py", line 510, in response_wrap
    response = f(*args, **kw)
  File "/opt/odoo/odoo13/addons/web/controllers/main.py", line 1320, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/opt/odoo/odoo13/addons/web/controllers/main.py", line 1312, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/opt/odoo/odoo13/odoo/api.py", line 383, in call_kw
    result = _call_kw_model(method, model, args, kwargs)
  File "/opt/odoo/odoo13/odoo/api.py", line 356, in _call_kw_model
    result = method(recs, *args, **kwargs)
  File "/opt/odoo/odoo13/odoo/models.py", line 4845, in search_read
    result = records.read(fields)
  File "/opt/odoo/odoo13/odoo/models.py", line 2877, in read
    fields = self.check_field_access_rights('read', fields)
  File "/opt/odoo/odoo13/odoo/models.py", line 2809, in check_field_access_rights
    invalid_fields = {name for name in fields if not valid(name)}
  File "/opt/odoo/odoo13/odoo/models.py", line 2809, in <setcomp>
    invalid_fields = {name for name in fields if not valid(name)}
  File "/opt/odoo/odoo13/odoo/models.py", line 2800, in valid
    field = self._fields.get(fname)
TypeError: unhashable type: 'list'

但是当位置是“/static/src/js/partner.js”时,我得到以下错误:

point_of_sale.assets.js:477 Could not get content for /static/src/js/partner.js defined in bundle 'point_of_sale.assets'.

【问题讨论】:

  • 尝试加载这样的字段:- models.load_fields("res.partner", ["billing_name", "document_number"]);
  • 这更容易,谢谢@VishnuVaNnErI

标签: customization pos odoo-13


【解决方案1】:

我意识到我用来推送字段的功能不支持列表,所以在我更正如下 js 文件后,该字段可以正常工作:

odoo.define('kyohei_pos_computerized_billing.partner', function (require) {
    "use strict";

    var models = require('point_of_sale.models');
    var super_posmodel = models.PosModel.prototype;

    models.PosModel = models.PosModel.extend({
        initialize: function (session, attributes) {
            var partner_model = _.find(this.models, function (model){
                return model.model === 'res.partner';
            });
            partner_model.fields.push('billing_name');
            return super_posmodel.initialize.call(this, session, attributes);
        },
    });
});

【讨论】:

  • 这是什么版本的 Odoo,这适用于版本 14?
  • 这曾经在 Odoo 13 上工作。在 Odoo 14 中出现了 OWL,但这不起作用。
  • 它实际上仍然有效,您是救生员!您是否有机会知道我如何自动将产品附加到订单行并在附加产品上设置自定义价格(单击自定义按钮)
猜你喜欢
  • 2020-07-11
  • 2015-11-06
  • 2021-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多