我试图在用户页面上显示用户签名的文档(来自“ Sign app”),所以我将其添加到继承的模型中:
x_signatures_relation = fields.One2many("signature.request.item", "partner_id")
x_signatures = fields.One2many("signature.request", compute="_get_signed_documents")
@api.one
def _get_signed_documents(self):
ids = []
for signature in self.x_signatures_relation:
ids.append(signature.signature_request_id)
self.x_signatures = ids
“ signature.request.item”是将伙伴(用户)与实际签名“ signature.request”相关联的表。 但是,即使当前用户有两个签名,这也会返回一个空视图,但是如果我替换了:
self.x_signatures = ids
与:
self.x_signatures = ids[0]
或:
self.x_signatures = ids[1]
它显示记录,这是怎么回事?
答案 0 :(得分:2)
Odoo关于如何“允许”操作One2many
和Many2Many
字段有一套非常具体的规则。
请参见my recent answer,其中详细说明了所有选项以及何时/如何使用它们。 Odoo documentation also explains it也是如此。
在您的情况下,您正在使用计算方法设置值,因此您想完全替换任何现有值。
# Instead of
# self.x_signatures = ids
# Try this, which uses the special number 6 to mean
# "replace any existing ids with these ids"
self.x_signatures = [(6, 0, ids)]
此外,您可以简化计算方法:
@api.one
def _get_signed_documents(self):
self.x_signatures = [(6, 0, self.x_signatures_relation.ids)]