如何使用域过滤器从 odoo13 模型中的所有其他记录中仅过滤出 Many2many 字段中的选定记录
How to filter out only the selected records in a Many2many field from all the other records in the model in odoo13 using domain filter
我正在制作一个可以制作包裹并在销售订单中使用的包裹模型,我的模型名称是sale.package。
class Package(models.Model):
_name = 'sale.package'
_description = 'Package table'
name = fields.Char(string='Name', required=True)
width = fields.Float(string='Width')
height = fields.Float(string='Height')
length = fields.Float(string='Length')
maximum_weight = fields.Float(string='Maximum weight')
为了在销售订单表单中使用它,我继承了 sale.order 模型并在销售订单中添加了一个 Many2many 字段来选择以前制作的包裹,我还创建了一个更新函数的 Onchange 函数同一销售订单中新建页面中的 One2many 字段。
class SaleOrderPackage(models.Model):
_inherit = 'sale.order'
packs = fields.Many2many('sale.package', string='Package')
package_lines = fields.One2many('sale.package.lines', 'line_name', string='Package Lines')
@api.onchange('packs')
def _onchange_packs(self):
for rec in self:
lines = [(5, 0, 0)]
for line in self.packs:
values = {
'name_on_line': line.name,
'line_width': line.width,
'line_height': line.height,
'line_length': line.length,
'line_maximum_weight': line.maximum_weight,
}
lines.append((0, 0, values))
rec.package_lines = lines
至此一切顺利,我的新要求是向同一个销售订单添加一个智能按钮,点击它后,必须显示销售订单中所选包裹的树状视图。我添加了智能按钮并在 python 文件中定义了一个函数,该函数 returns 不仅选择了所选的而且还使用该模型制作的所有包。
def selected_packages(self):
print(self.packs)
return {
'name': 'Selected Packages',
'domain': [],
'view_type': 'form',
'res_model': 'sale.package',
'view_id': False,
'view_mode': 'tree,form',
'type': 'ir.actions.act_window'
}
因为我学习 Odoo 才一周,所以我无法弄清楚如何在这种情况下使用域过滤器,请帮忙。
提前致谢。
如果您只需要显示选定的包,您只需使用它们的 id 过滤记录。
使用self.packs.ids到return对应于所选包的实际记录id列表:
'domain': [('id', 'in', self.packs.ids)],
我正在制作一个可以制作包裹并在销售订单中使用的包裹模型,我的模型名称是sale.package。
class Package(models.Model):
_name = 'sale.package'
_description = 'Package table'
name = fields.Char(string='Name', required=True)
width = fields.Float(string='Width')
height = fields.Float(string='Height')
length = fields.Float(string='Length')
maximum_weight = fields.Float(string='Maximum weight')
为了在销售订单表单中使用它,我继承了 sale.order 模型并在销售订单中添加了一个 Many2many 字段来选择以前制作的包裹,我还创建了一个更新函数的 Onchange 函数同一销售订单中新建页面中的 One2many 字段。
class SaleOrderPackage(models.Model):
_inherit = 'sale.order'
packs = fields.Many2many('sale.package', string='Package')
package_lines = fields.One2many('sale.package.lines', 'line_name', string='Package Lines')
@api.onchange('packs')
def _onchange_packs(self):
for rec in self:
lines = [(5, 0, 0)]
for line in self.packs:
values = {
'name_on_line': line.name,
'line_width': line.width,
'line_height': line.height,
'line_length': line.length,
'line_maximum_weight': line.maximum_weight,
}
lines.append((0, 0, values))
rec.package_lines = lines
至此一切顺利,我的新要求是向同一个销售订单添加一个智能按钮,点击它后,必须显示销售订单中所选包裹的树状视图。我添加了智能按钮并在 python 文件中定义了一个函数,该函数 returns 不仅选择了所选的而且还使用该模型制作的所有包。
def selected_packages(self):
print(self.packs)
return {
'name': 'Selected Packages',
'domain': [],
'view_type': 'form',
'res_model': 'sale.package',
'view_id': False,
'view_mode': 'tree,form',
'type': 'ir.actions.act_window'
}
因为我学习 Odoo 才一周,所以我无法弄清楚如何在这种情况下使用域过滤器,请帮忙。 提前致谢。
如果您只需要显示选定的包,您只需使用它们的 id 过滤记录。
使用self.packs.ids到return对应于所选包的实际记录id列表:
'domain': [('id', 'in', self.packs.ids)],