我想将 res.partner 地址中的实际城市字段更改为 many2one 字段而不添加新字段
i want to change the actual city field in res.partner adress to a many2one field without adding new field
我的代码如下:
# -*- encoding: utf-8 -*-
from openerp import models,fields, api
class ResPartner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
city_id = fields.Many2one('res.city','Ville',stored = True
,ondelete='restrict')
class ResCity(models.Model):
_name = "res.city"
_description = "Ville"
name = fields.Char(u"Nom",required = True)
state_id = fields.Many2one("res.country.state", 'Zone',ondelete='restrict')
所以在我在 xml 中添加视图之后,但我的要求是我需要更改实际字段而不添加新字段
旧的:city = fields.char 新的应该是这样的:city = fields.many2one
只需覆盖旧 API 中定义的 city
字段 API:
from openerp import models,fields, api
from openerp.osv import fields as ofields
class ResPartner(models.Model):
_inherit = 'res.partner'
_columns = {
'city': ofields.many2one('res.city', 'Ville', ondelete='restrict'),
}
请记住,很多视图将不再有效,例如合作伙伴看板视图。
您可以简单地覆盖定义,但它会破坏使用此字段的每个模型或视图,相反您可以将其设为函数字段:
class ResPartner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
city_id = fields.Many2one('res.city','Ville'
,ondelete='restrict')
@api.depends('city_id')
@api.multi
def set_city(self):
self.city=self.city_id.name
city = fields.Char(compute=set_city, store=True)
在您的表单视图中,您应该使用添加 city_id
和隐藏 city
,让其余的安静...
编辑
您可以使用 Odoo 附带的新插件 res_partner_city
。
我的代码如下:
# -*- encoding: utf-8 -*-
from openerp import models,fields, api
class ResPartner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
city_id = fields.Many2one('res.city','Ville',stored = True
,ondelete='restrict')
class ResCity(models.Model):
_name = "res.city"
_description = "Ville"
name = fields.Char(u"Nom",required = True)
state_id = fields.Many2one("res.country.state", 'Zone',ondelete='restrict')
所以在我在 xml 中添加视图之后,但我的要求是我需要更改实际字段而不添加新字段 旧的:city = fields.char 新的应该是这样的:city = fields.many2one
只需覆盖旧 API 中定义的 city
字段 API:
from openerp import models,fields, api
from openerp.osv import fields as ofields
class ResPartner(models.Model):
_inherit = 'res.partner'
_columns = {
'city': ofields.many2one('res.city', 'Ville', ondelete='restrict'),
}
请记住,很多视图将不再有效,例如合作伙伴看板视图。
您可以简单地覆盖定义,但它会破坏使用此字段的每个模型或视图,相反您可以将其设为函数字段:
class ResPartner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
city_id = fields.Many2one('res.city','Ville'
,ondelete='restrict')
@api.depends('city_id')
@api.multi
def set_city(self):
self.city=self.city_id.name
city = fields.Char(compute=set_city, store=True)
在您的表单视图中,您应该使用添加 city_id
和隐藏 city
,让其余的安静...
编辑
您可以使用 Odoo 附带的新插件 res_partner_city
。