我有一个应用程序模块,用于加载员工以进行数据库初始化 上一个模块版本中的自定义数据:
<?xml version="1.0"?>
<openerp>
<data>
....
<!-- John Smith -->
<record id="emp_john_smith" model="hr.employee">
<field name="name">John Smith</field>
<field name="company_id" ref="base.main_company"/>
<field name="department_id" ref="dp_production"/>
<field name="job_id" ref="jb_production_officer"/>
<field name="work_email">john@company.com</field>
<field name="begin_date">2012-01-01</field>
<field name="gender">male</field>
<field name="work_location">Madrid</field>
<field name="lang">es_ES</field>
</record>
....
<record id="ctr_john_smith_hr" model="hr.contract">
<field name="name">John Smith Production Contract</field>
<field name="employee_id" ref="emp_john_smith"/>
<field name="job_id" ref="jb_production_officer"/>
<field name="email">john@company.com</field>
<field name="date_start">2012-01-01</field>
<field name="wage">0</field>
<field name="percent_working_hours">15</field>
<field name="working_hours" ref="spain_calendar"/>
</record>
</data>
</openerp>
但是必须在该模块的下一个版本中删除这些记录。我应该在下一个版本的XML数据文件中使用哪个记录元素来删除这些记录?
答案 0 :(得分:4)
您可以在xml中使用delete标记。 不要删除您在xml文件中创建的xml数据记录。在新版本中,只需在文件末尾添加删除标记。
<delete id="module_name.xml_record_id" model="hr.employee"/>
或者你可以使用函数标签作为Yucer说
答案 1 :(得分:1)
此代码应该有效:
<?xml version="1.0"?>
<openerp>
....
<data>
<!-- removes John Smith-->
<function model="hr.contract" name="unlink">
<function eval="[[('employee_id', '=', ref('emp_john_smith'))]]" model="hr.contract" name="search"/>
</function>
<function model="hr.employee" name="unlink">
<!-- ids = --> <value eval="[ref('emp_john_smith')]"/>
</function>
</data>
</openerp>
但它有点冒险删除hr.employee,因为它有很多相关的实体。也许更好地“停用”它们就像这样:
<?xml version="1.0"?>
<openerp>
....
<data noupdate="1">
<!-- deactivates John Smith -->
<function model="hr.employee" name="deactivate">
<!-- ids = --> <value eval="[ref('emp_john_smith')]"/>
</function>
</data>
</openerp>
其中,deactivate是这样的方法:
class hr_employee(Model):
_name = str('hr.employee')
_inherit = str('hr.employee')
def deactivate(self, cr, uid, ids, context=None):
if isinstance(ids, (int, long)):
ids = [ids]
vals = {'active': False}
res = super(hr_employee, self).write(cr, uid, ids, vals, context)
return res