【发布时间】:2021-12-06 21:08:24
【问题描述】:
在我的 odoo 应用程序中,我扩展了合作伙伴模型,因此在 adrees 中,它可以保存有关合作伙伴的城市和社区的信息。 我还扩展了 sale_report 模型,因此我可以获得按合作伙伴的州、市和社区分组的销售报告。但是,当我想在 website_sale(电子商务)中编辑帐单地址的信息时,我收到以下错误: psycopg2.OperationalError:无法更新视图“sale_report”
这是错误:
Traceback (most recent call last):
File "/home/ernesto/Programming/odoo/odoo13/odoo/addons/base/models/ir_http.py", line 234, in _dispatch
result = request.dispatch()
File "/home/ernesto/Programming/odoo/odoo13/odoo/http.py", line 809, in dispatch
r = self._call_function(**self.params)
File "/home/ernesto/Programming/odoo/odoo13/odoo/http.py", line 350, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/ernesto/Programming/odoo/odoo13/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/home/ernesto/Programming/odoo/odoo13/odoo/http.py", line 346, in checked_call
flush_env(self._cr)
File "/home/ernesto/Programming/odoo/odoo13/odoo/sql_db.py", line 76, in flush_env
env_to_flush['base'].flush()
File "/home/ernesto/Programming/odoo/odoo13/odoo/models.py", line 5497, in flush
process(self.env[model_name], id_vals)
File "/home/ernesto/Programming/odoo/odoo13/odoo/models.py", line 5488, in process
recs._write(vals)
File "/home/ernesto/Programming/odoo/odoo13/odoo/models.py", line 3691, in _write
cr.execute(query, params + [sub_ids])
File "/home/ernesto/Programming/odoo/odoo13/odoo/sql_db.py", line 173, in wrapper
return f(self, *args, **kwargs)
File "/home/ernesto/Programming/odoo/odoo13/odoo/sql_db.py", line 250, in execute
res = self._obj.execute(query, params)
psycopg2.OperationalError: cannot update view "sale_report"
DETAIL: Views containing GROUP BY are not automatically updatable.
HINT: To enable updating the view, provide an INSTEAD OF UPDATE trigger or an unconditional ON UPDATE DO INSTEAD rule
这是我的代码:
class Partner(models.Model):
_inherit = 'res.partner'
municipality_id = fields.Many2one('res.country.state.municipality', string='Municipality', domain="[('state_id', '=?', state_id)]")
neighbourhood_id = fields.Many2one('res.country.state.municipality.neighbourhood', string='Neighbourhood', domain="[('municipality_id', '=?', municipality_id)]")
class SaleReport(models.Model):
_inherit = 'sale.report'
shipping_state_id = fields.Many2one('res.country.state', string='State', related="partner_id.state_id", store="True")
shipping_municipality_id = fields.Many2one('res.country.state.municipality', string='Municipality', related="partner_id.municipality_id",store="True")
shipping_neighbourhood_id = fields.Many2one('res.country.state.municipality.neighbourhood', string='Neighbourhoods', related="partner_id.neighbourhood_id", store="True")
def _query(self, with_clause='', fields={}, groupby='', from_clause=''):
fields['shipping_state_id'] = ", s.shipping_state_id as shipping_state_id"
fields['shipping_municipality_id'] = ", s.shipping_municipality_id as shipping_municipality_id"
fields['shipping_neighbourhood_id'] = ", s.shipping_neighbourhood_id as shipping_neighbourhood_id"
groupby += ', s.shipping_state_id, s.shipping_municipality_id, s.shipping_neighbourhood_id'
return super(SaleReport, self)._query(with_clause, fields, groupby, from_clause)
我正在使用 Odoo 13
【问题讨论】:
-
我认为您应该在 _inherit='sale.report' 下添加 _auto=False。
-
附带说明,使用可变对象作为关键字参数的默认值是不好的做法。例如,在
_query的定义中,您有fields={}。您应该将默认值设置为None,然后,如果它是None,则在函数体中将其设置为等于{}。见here。