gpt4 book ai didi

python - 奥杜 : Acces a column from many2one

转载 作者:太空宇宙 更新时间:2023-11-03 16:35:23 25 4
gpt4 key购买 nike

这是我的问题:

我在模型1中:

class model1(osv.osv):
_name = 'model1'
_columns = {
'name': fields.many2one('res.partner',
u'Person',
domain=[('my_boolean', '=', False)],
required=True,
select=True),
'type' = fields.selection([('1', 'One'),
('2', 'Two'),
u'Select',
required=True),
}

@api.onchange('type')
def onchange_type_model1(self)
self.name.model3_id = 2

我想在这个onchange中修改res.partner中model3_id的id值:

-res.partner在此模块中:

class res_partner(osv.osv):
_inherit = 'res.partner'
_columns = {
'model1_partner_ids': fields.one2many('model1',
'name',
u'asker from model1',
select=True),
}

-res.partner 位于 model3 模块中:

class res_partner:
_inherit = res.partner
_columns = {
'model3_id': fields.many2one('model3',
u'Model3'
track_visibility='onchange',
select=True),
}

model3在这里并不重要,我有10个model3对象的id,例如,当在model1中修改“type”时,我需要能够影响res.partner中的id“2”到“model3_id”。

我试过这个:odoo - get value from many2one field通过这样做:

@api.onchange('type')
def onchange_type_demand(self, cr, uid, ids, context=None):
for name in self.browse(cr, uid, ids, context=context):
if name.model3_id:
name.model3_id = 2

但是它给了我一个错误,说 record.env 不存在。我试图找到此错误的答案,但没有一个与我的代码匹配。

我查看了数十个主题,尝试了一整个上午来解决它,但无论我做什么,它都行不通。 (我做的第一件事 - 出现在我写的第一类中 - 没有给我任何错误,但没有改变数据库中的任何内容。)

感谢您的阅读以及您可以提供的任何帮助。

编辑:我认为这里唯一真正的问题是“如何将 ID 作为 Many2one 的值?”但我不确定这是唯一的问题,所以我保留了所有文本。

最佳答案

我终于解决了我的问题:

当您创建 onchange 时,它​​只会更改 javascript,如果您尝试修改的字段(由于其他字段上的 onchange)不在您的树中,则不会更改。我在查看 phppgadmin 时发现了什么:

  • 当您更改字段时,它会更新 JavaScript,数据库中不会执行任何操作。
  • 保存更改后,JavaScript 将分析这些字段并用这些字段更新数据库。

因此,当某些内容不在 xml 中时,您不能对其使用 onchange。如果您想更改另一个模型或模块中的某些内容,那真的很痛苦。但更重要的是,尝试这个确实很愚蠢,但它完全有道理:onchange 的目的是在完成任何注册之前进行更新,唯一的兴趣是在您仍然修改它时显示它。

得益于 Odoo 8.0 API,解决方案非常简单。这是一个示例(这是资源合作伙伴):

'my_field': field.many2one(compute='_compute_second_field', store=True, readonly=True)

@api.depends('name_ids.type') #name_ids is the one2many reverse of name's many2one in model1
for record in self:
if self.name_ids: #if some names are pointing to this, name_ids is not empty
record.model3_id = 2
else: #if doesn't exist, default value
record.model3_id = 0

所以当你在res_partner中创建时,这个res_partner仍然不在model1中,取值为'0'。然后你将其添加到model1中,取值2。如果你从model1中删除他,则再次取值'0'(删除仍然是修改)。

对于 openerp-7 来说,它是 'fields.function' (以 type='many2one' 作为参数,store={('model1':_other_function, ['type'], 10)} 但我没有'没能这样完成,所以我不会展示它

关于python - 奥杜 : Acces a column from many2one,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com