[TIP] Cách đơn giản để tạo XML Xpath chính xác trong Odoo cùng PyCharm IDE
Khi cần điều chỉnh thuộc tính của 1 field trong view đã có sẵn, ta cần dùng xpath
để chọn đối tượng cần chỉnh sửa.
Đối với form đơn giản, ví dụ:
<record id="some_view_id" model="ir.ui.view">
<field name="name">demo.view.form</field>
<field name="model">demo.model</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="user_id"/>
<field name="demo_field"/>
</group>
</sheet>
</form>
</record>
và ở một module khác, bạn không muốn người dùng có thể tạo trực tiếp user mới từ field user_id
của view trên, với xpath
:
<record id="some_view_id_inherit" model="ir.ui.view">
<field name="name">demo.view.form</field>
<field name="model">demo.model</field>
<field name="inherit_id" ref="demo_module.some_view_id"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='user_id']">
<attribute name="options">{"no_create": True}</attibute>
</xpath>
</field>
</record>
tuy nhiên, trong trường hợp field bạn cần sửa nằm trong 1 form phước tạp, có rất nhiều field cùng tên hiển thị tùy điều kiện (ví dụ field partner_id
thuộc form view trong file: /odoo/addons/crm/views/crm_lead_views.xml
chẳng hạn) bạn sẽ vất vả hơn nhiều.
PyCharm IDE có công cụ hỗ trợ bạn tạo xpath chính xác qua các bước sau:
Cài đặt plugin: "XpathView + XSLT"
restart IDE sau khi cài đặt
- Click phải vào
field
(hay node bất kỳ) cần lấy xpath, trong menu chuột phải, chọn "Show unique Xpath" (phím tắt Ctrl + Alt + X + P) - Click vào icon copy trong Xpath hiển thị
- Trở lại file view đang dùng để chỉnh sửa field, paste giá trị đã copy vào
expr
tương ứng - Lưu ý: giá trị xpath do IDE sinh ra là full-path từ root folder, bạn cần xóa chỉ để lại giá trị sau node tương ứng với view của bạn (form, tree...), ví dụ:
- giá trị IDE tạo:
/odoo/record[@id='crm_lead_view_form']/field[@name='arch']/form/sheet/group/group[2]/field[@name='partner_id']
- giá trị sử dụng:
//sheet/group/group[2]/field[@name='partner_id']
- giá trị IDE tạo: