【问题标题】:Odoo how to solve error psycopg2.OperationalError: cannot update view "sale_report"?Odoo如何解决错误psycopg2.OperationalError:无法更新视图“sale_report”?
【发布时间】: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

标签: python odoo odoo-13


【解决方案1】:

当您更改有销售的合作伙伴的状态时,Odoo 将尝试重新计算 sale.report 视图中 shipping_state_id 字段的值(_auto 设置为 False),这就是您看到此内容的原因错误。

发生这种情况是因为您在没有数据库表的模型中的相关字段上将 store 设置为 True

来自related fields 文档:

默认情况下,相关字段的值不会存储到数据库中。添加属性 store=True 以使其存储,就像计算字段一样。相关字段在修改其依赖项时会自动重新计算。

送货地址字段值来自 SQL 查询,因此您无需使用 relatedstore 来修复上述错误,请将其删除。

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多