openerp / addons / base / res / res_country_data.xml文件中有记录:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<record id="ae" model="res.country">
<field name="name">United Arab Emirates</field>
<field name="code">ae</field>
<field file="base/static/img/country_flags/ae.png" name="image" type="base64" />
<field name="currency_id" ref="AED" />
<field eval="971" name="phone_code" />
</record>
我想扩展此数据以包含对我的模型数据的引用,因此我尝试了以下内容:
<openerp>
<data>
<!-- extend data from country_data.xml -->
<record id="ae_range" model="res.country">
<field name="ean_range" ref="res.country.ean_range">629</field>
</record>
<!-- data for my model country model must be pointing to -->
<record id="629" model="res.country.ean_range">
<field name="range_start">629</field>
<field name="range_end">629</field>
<field name="name">629</field>
</record>
根据this question的建议,尝试了常用的继承规则,例如:
<record id="ae_range" model="res.country">
<field name="inherit_id" ref="res.country.ean_range"/>
...
</record>
但每次我收到有关缺少xmlid的错误。如何扩展现有数据文件并使用我自己的数据填充模块?也许我做了一件非常糟糕的事情,也许你可以建议如何使用模块安装期间添加的字段填充国家模型?
编辑: 类定义
class InstantProductTemplate(models.Model):
_name = 'product.template'
_inherit = 'product.template'
country_of_origin = fields.Many2one('res.country',
string='Country of origin',
default="_guess_country",
store=True)
class InstantCountryRanges(models.Model):
_name = 'res.country'
_inherit = 'res.country'
ean_range = fields.One2many('res.country.ean_range', 'name')
class InstantCountry(models.Model):
_name = 'res.country.ean_range'
name = fields.Char()
range_start = fields.Integer("Range start")
range_end = fields.Integer("Range end")
提前谢谢!
答案 0 :(得分:1)
我建议您为范围使用更好的xml ID,然后尝试在xml文件中获得正确的顺序,例如:
<openerp>
<data>
<!-- use <module>.<xmlid> as correct xml id for referencing -->
<record id="ean_range_629" model="res.country.ean_range">
<field name="range_start">629</field>
<field name="range_end">629</field>
<field name="name">629</field>
<field name="country_id" ref="base.ae" />
</record>
</data
</openerp>
您需要设置正确的xml ID以覆盖。对于外部模块记录,您必须设置模块名称,然后设置xml id。您可以在Web客户端中使用调试模式找到正确的xml ID。打开记录(此处为阿拉伯联合酋长国res.country
),在调试下拉菜单中选择“查看元数据”。
编辑:
您需要res.country.ean_range
上的many2one字段,并且应该在res.country
上修改one2many:
# res.country.ean_range
country_id = fields.Many2one(comodel_name='res.country', string="Country")
# res.country
ean_range = fields.One2many('res.country.ean_range', 'country_id')
现在您可以使用上面的xml了! (也编辑过)