我目前正在使用Odoo的数据库来批量导入和导出数据。为此,我也使用标签。例如,我需要批量标记500个订阅。有人知道模型和标记之间的关系保存在哪些表中吗?
我已经找到了:
-
res_partner_res_category_rel
-
sale_subscription_template_tag_rel
我要找的是订阅级别的标签。通过URL我可以看到,我正在查看的模型是";销售.订阅";。因此,我开始寻找一个名为";sale_subscription_tag_relation";但是什么都没有。sale_subscription_template_tag_rel为空,但已标记了订阅。所以不可能是这样。
UI上显示的信息需要存储在某个地方,但我就是找不到哪里。我正在查看的URL:
https://localhost/web#id=CUSTOMER_ID&动作=454&active_id=1779&model=sale.subscription&view_type=form&cids=1&menu_id=329
订阅模型的表格:
sale_subscription
sale_subscription_alert
sale_subscription_alert_sale_subscription_template_rel
sale_subscription_close_reason
sale_subscription_close_reason_wizard
sale_subscription_line
sale_subscription_price_wizard
sale_subscription_snapshot
sale_subscription_stage
sale_subscription_template
sale_subscription_template_tag_rel
sale_subscription_wizard
sale_subscription_wizard_option
如果没有指定关系名称,Odoo将根据表名称(model、comodel(的字母顺序进行计算。
tables = sorted([model._table, comodel._table])
self.relation = '%s_%s_rel' % tuple(tables)
如果在tags字段上设置了关系参数,请检查sale.subscription
模型,如果没有,请使用上面的代码进行计算(comodel名称通常是Many2many字段的第一个参数(。
编辑:
例如,事件模块中定义的tag_ids字段没有指定关系。
共模型名称为event.tag
,字段在event.type
模型中定义,为了获得表名称,我们需要将.
替换为_
来获得表名称。
在下面的代码中,我们将按升序对模型和comodel表名进行排序,并使用结果使用格式字符串构建关系名(它将按提供的顺序用表名替换%s
(
>>> tables = sorted(['event_type', 'event_tag'])
>>> tables
['event_tag', 'event_type']
>>> relation = '%s_%s_rel' % tuple(tables)
>>> relation
'event_tag_event_type_rel'
安装模块后,数据库中应该有一个名为event_tag_event_type_rel
的表。