【发布时间】:2016-05-23 10:46:35
【问题描述】:
我有一个计算字段,在更新字段时必须更新它。
所以我使用@api.depends('field1')并链接函数
field_to_compute: fields.integer(compute='the_function' store=True)
效果很好。
但是知道我想在field1 取值A 时更新它,并在field1 取值B 时保持不变。但是 field_to_compute 的旧值是从数据库中导入的,并未计算出来。
所以我有两个问题:
- 如何让用户自己设置值。 (我可以修改它, 但是当我创建一个新成员时,它将被计算并且仅在之后 第一次保存我可以在 UI 中修改)
-
我怎样才能做出类似的东西:
@api.depends('field1') def the_function(self): value = self.field1 if value == A: field_to_compute = 123123 elif value == B: field_to_compute = stored_field_to_compute #field_to_compute保持与之前存储的值相同
编辑(示例):
我在当前模型的一个 res.partner 中,继承了 res.partner。 我有一个字段:
'model_state': field.char(compute='compute_type', string = 'Demand', store=True, readonly=True)
在另一个继承 res.partner 的 res.partner 中,在另一个模块中,我有 2 个字段:grade 和 status,分别是一个 int 和一个 many2one。计算与 model_state 相同的 compute_type,方法相同。
我也在这个 res.partner 中,有一个 one2many 字段:link_ids
所以我的功能是:
@api.depends('link_ids.type', 'link_ids.result')
def compute_type(self):
for record in self:
if self.link_ids:
if self.link_ids.result == 'A':
if self.link_ids.type == 'type1':
record.model_state = 'Mytext'
record.grade = 15
record.state = 1 #this is an id
elif self.link_ids.result == 'B':
record.model_state = 'MySecondText'
record.state = 2 #this is an id
我不会把所有的东西都放上去,因为它就像 25 elif (不是所有都一样,如果等等等等),所以它不会是相关的。我检查了很多时间是否没有修改记录。等级如果没有对其进行任何操作,否则或不知道,但它只是被清空。
基本上,简化后,如果投票结果“OK”,我想做点什么。并将状态的id更改为“接受”,给一个文本(如标题),并给他一个更好的成绩,如果不是,他有一个状态的id为“拒绝”,给另一个文本,然后保持与实际成绩相同。
【问题讨论】:
-
你怎么能猜到
self.link_ids.result这样的 one2many 的结果?其中 link_ids 可能包含多条记录,因此可能有多个结果。并希望这里的代码没有错误是错字取决于实际上是@api.depends(...) -
主键,对一个 res_partner 只能提出一个需求。这只是为了在树视图中访问我的 res_partner 并选择其中一个(我在可编辑的树视图中)。所以,当我在 res_partner 中询问 links_ids 时,它会找到他所在的元组并查看值。我尝试了很多,它总是能达到我的预期,除了不能改变的字段(我需要在我的模型中选择一个 res.partner,many2one 视图对此非常有用)
-
关于错字,我加了's',只是我的帖子中的错字,不是代码中的错字
-
如果我没记错的话,
self.link_ids.field_x == 'foobar'比较会给你一个单例错误,在 link_ids 中有多个条目。 -
是的,但它应该是,每个 res_partner 应该只有一个 link_id。最后,客户改变了主意,关于如何建立一对一关系的任何想法? (为了不再有单例错误),如果我在 many2one 中更改我的 link_ids,我将在 res_partner 中有一个 many2one,在我的模型中有一个 many2one。这行得通吗?
标签: python python-2.7 openerp odoo-8