英文:
How to add domain in onchange function for a One2many field
问题
理解情况
我有下面两个模型。我根据'requirement_id'添加了一个onchange函数。我想在'requirement_id'字段中添加一个域过滤器,以从'requirement_id'中过滤'panel_id'字段。这是否可能?我的onchange函数以这种方式不起作用。
class PanelVendorAssignment(models.Model):
_name = "panel.vendor.assignment"
requirement_id = fields.Many2one('hr.job', string='Requirement')
panel_vendor_assignments_ids = fields.One2many(
string='Vendor', comodel_name='panel.vendor.assignment.line',
inverse_name='panel_vendor_assignment_id', tracking=True)
@api.onchange('requirement_id')
def _onchange_panel_stage(self):
if self.requirement_id:
panel_stage_ids = self.env['panel.time.slot.availability'].sudo().search(
[('requirement_id', '=', self.requirement_id.id), ('status', '=', 'open')])
for rec in panel_stage_ids:
domain = [('id', '=', rec.panel_user_id.id)]
return {'domain': {'panel_vendor_assignments_ids.panel_id': domain}}
class PanelVendorAssignmentLine(models.Model):
_name = 'panel.vendor.assignment.line'
panel_vendor_assignment_id = fields.Many2one(comodel_name='panel.vendor.assignment', ondelete='cascade')
panel_id = fields.Many2one(comodel_name='res.partner', required=True)
请注意,我已经保留了代码的格式和结构,只翻译了您提供的内容。
英文:
Understand the situation
I 've 2 model below. I have added a onchange function based on 'requirement_id' . I want to add a domain filter in panel_id field from requirement_id . is it possible to do? my onchange function in this way it's not working
class PanelVendorAssignment(models.Model):
_name = "panel.vendor.assignment"
requirement_id = fields.Many2one('hr.job', string='Requirement')
panel_vendor_assignments_ids = fields.One2many(
string='Vendor', comodel_name='panel.vendor.assignment.line',
inverse_name='panel_vendor_assignment_id', tracking=True)
@api.onchange('requirement_id')
def _onchange_panel_stage(self):
if self.requirement_id:
panel_stage_ids = self.env['panel.time.slot.availability'].sudo().search(
[('requirement_id', '=', self.requirement_id.id),('status', '=', 'open')])
for rec in panel_stage_ids:
domain = [('id', '=', rec.panel_user_id.id)]
return {'domain': {'panel_vendor_assignments_ids.panel_id': domain}}
class PanelVendorAssignmentLine(models.Model):
_name = 'panel.vendor.assignment.line'
panel_vendor_assignment_id = fields.Many2one(comodel_name='panel.vendor.assignment', ondelete='cascade')
panel_id = fields.Many2one(comodel_name='res.partner',required=True,)
答案1
得分: 0
不能这样做。
你的代码也有一些错误,会覆盖域的值,因此你将返回每个记录的最后一个域,而不是按记录的域。
你可以做的是计算并保存o2m中每个记录的域,保存在另一个字段中,以供panel_id字段在本地使用。
要保存域,你可以使用二进制字段或使用这个模块:
https://github.com/OCA/web/tree/15.0/web_domain_field
英文:
No you can't do that.
Your code also have some errors overwriting the value of the domain so you will be returning the last domain not per record domain
What you can do it's to calculate and save the domain for every record in the o2m in another field to be used locally by the panel_id field
To save the domain you could use a binary field or use this module:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论