python - 如何将国家组字段与 Odoo 或 OpenERP 中的发票自定义字段联系起来?
问题描述
这是我在这里的第一个问题!我想知道如何将国家组表单中的文本字段和export_message
布尔字段与发票表单中的文本字段和布尔字段相关联。dual_box
x_message
x_dual
我想知道我怎样才能得到一个国家的国家组。让我解释一下...
例如:
我有 3 个国家组(A、B 和 C),我有 5 个国家(1、2、3、4、5)。
然后,国家组A有国家(1 和 5),国家组B有(2 和 3),国家组C有(1 和 4)。在发票表格中,我有一个客户的地址和国家。
例如,如果客户的国家/地区为 1,我如何在发票中获取国家/地区组并将其保存在自定义字段中?
我正在使用 Odoo 12
我的 CountryGroup 班级
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='')
谢谢
解决方案
在 account_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", 'rel_country_group', '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 中的many2many即列表中的列表
。在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'
推荐阅读
- c++ - 在这种特定情况下,多重继承有那么糟糕吗?
- php - 在新帖子和新页面上删除 WP 的品牌
- r - 获取每个唯一值的出现次数
- python - 索引日期时间频率在 asfreq 之后保持无
- batch-file - 取文件名的一部分,复制到文件中
- javascript - 检查 yajra/laravel 表是否已经初始化的正确方法?
- sql - 通过基于多个 ID 从两个不同的行中减去列值来创建自定义字段
- javascript - 由于错误编辑器错误元素,CKEditor 4 无法正常工作
- c# - 懒加载字典
- python-3.x - 为什么 python 中的多行打印不适用于单引号和双引号字符串?