如何解决和防止多个字段成为odoo中的循环参考问题

如何解决和防止多个字段成为odoo中的循环参考问题,odoo,Odoo,在我的模块中,我被迫在大多数具有auto=true的模型中使用多个one字段,因此在数据库中创建了太多的fk,然后这个fk导致循环引用问题,而真正的问题是当多个用户工作时,软件的性能非常缓慢和滞后。我的问题是,如果任何人都可以帮我,我真的很感激。 提前谢谢 我试图减少多个One字段,但这并不能解决问题为了防止循环引用,您可以利用帮助器在Python约束内的记录分层结构中检查循环引用,并在检测到循环时引发错误,例如: @api.constraints('m2o_字段') def检查m2o字段(自身

在我的模块中,我被迫在大多数具有auto=true的模型中使用多个one字段,因此在数据库中创建了太多的fk,然后这个fk导致循环引用问题,而真正的问题是当多个用户工作时,软件的性能非常缓慢和滞后。我的问题是,如果任何人都可以帮我,我真的很感激。 提前谢谢


我试图减少多个One字段,但这并不能解决问题

为了防止循环引用,您可以利用帮助器在Python约束内的记录分层结构中检查循环引用,并在检测到循环时引发错误,例如:

@api.constraints('m2o_字段')
def检查m2o字段(自身):
如果不是self.\u检查\u递归(parent='m2o\u field'):
引发异常。ValidationError(
_(“无法创建递归关系”。)

如果检测到循环,
\u check\u recursion()
将返回
False
。您可以将多对一字段的名称传递给
\u check\u recursion()
,否则将使用
\u parent\u name
类属性的值(默认情况下)。

要添加防止循环关系的检查,请在 型号:

@api.constraints('parent_id'))
定义检查层次结构(自):
如果不是self.\u检查\u递归():
raise models.ValidationError(
“错误!无法创建递归类别。”)
如果不是默认的
父id
,则应在
\u check\u recursion()
中将特定的manyOne关系作为参数传递。 我使用了
models.ValidationError
,因为我在Odoo-11环境中工作。但是
\u check\u recursion()
方法将阻止层次结构无限循环