问题描述
这是我在这里的第一个问题!
我想知道如何将 Country Group 表单中的 export_message
文本字段和 dual_Box
布尔字段与发票表单中的 x_message
文本字段和 x_dual
布尔字段联系起来。
而且我想知道如何获取一个国家/地区的国家/地区组。 让我解释一下...
例如:
我有 3 个国家/地区组(A、B 和 C),我有 5 个国家/地区(1、2、3、4、5)。
然后,国家组A有国家(1和5),国家组B有(2和3) 和 Country Group C 有 (1 和 4)。 在发票表单中,我有一个客户有地址和国家/地区。
如果客户的国家/地区为 1,我如何获取发票中的国家/地区组并将其保存在自定义字段中?
我正在使用 odoo 12
我的国家组课程
class CountryGroup(models.Model):
_name = 'country.group'
name = fields.Char()
country_ids = fields.Many2many("res.country")
export_message = fields.Text(string="Export Message")
dual_Box = fields.Boolean(string="Dual Box")
我的发票类
class AccountInvoice(models.Model):
_inherit = 'account.invoice'
x_confirm_message = fields.Boolean(string='Confirm Print Message')
x_message = fields.Text(string='Message',related='')
x_dual = fields.Boolean(string="Dual Box",related='')
谢谢
解决方法
在count_invoice模型的country_group上实现一个计算字段:
class AccountInvoice(models.Model):
_inherit = 'account.invoice'
country_group = fields.Many2one('country.group','Country Group',compute="_find_country_group")
x_confirm_message = fields.Boolean(string='Confirm Print Message')
x_message = fields.Text(string='Message',related='country_group.export_message')
x_dual = fields.Boolean(string="Dual Box",related='country_group.dual_box')
@api.depends('customer_id')
def _find_country_group(self):
# Get country of the customer
country_id = self.env['res.partner'].search([('id','=',self.customer_id.id)]).country_id
# Get country_group based on customer's country
country_gp_id = self.env['rel.country.group'].search([('country_id',country_id.id)],limit=1)
self.country_group = country_gp_id
class ResCountry(models.Model):
_inherit = 'res.country'
country_gp_ids = fields.Many2many("country.group",'rel_country_group','country_id','country_group_id')
class CountryGroup(models.Model):
_name = 'country.group'
name = fields.Char()
country_ids = fields.Many2many("res.country",'country_group_id','country_id')
export_message = fields.Text(string="Export Message")
dual_box = fields.Boolean(string="Dual Box")
@api.model
def create(self,vals):
gpA = [1,5]
gpB = [2,3]
if vals['country_ids'].ids in gpA:
vals['name'] = 'Group A'
elif vals['country_ids'].ids in gpB:
vals['name'] = 'Group B'
...
return super(CountryGroup,self).create(vals)
在odoo v14中,您可以只检查many2many in many2many,即list in list
在odoo v12中,你必须遍历每个many2many来检查。
if [x for x in vals['country_ids'].ids if x in gpA]:
vals['name'] = 'Group A'
elif [x for x in vals['country_ids'].ids if x in gpB]:
vals['name'] = 'Group B'