Odoo PoS未显示自定义字段值



我创建了一个模块,该模块使用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/computerzed_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/computerzed_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/parter.js"时,我会得到以下错误:

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

我已经意识到我用来推送字段的函数不支持列表,所以在我像下面这样更正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);
},
});
});

最新更新