Hi forum.
I'm still learning Python and many is working. now i have edited module Base_location and changed something.
Now i want to use field bzib.suburb as Primary field and wen is empty use city field.
in the name_get, name_serch i want add the suburb field for searching and displaying in the form.
Yust changes in def name_get
name = [bzip.name, bzip.city, bzip.suburb]
and def name_search
if not ids:
ids = self.search(cr, uid, [('suburb', 'ilike', name)] + args, limit=limit)
dosed working
**File "/usr/lib/pymodules/python2.7/openerp/addons/base_location/better_zip.py", line 76, in name_search return self.name_get(cr, uid, ids, context=context)
File "/usr/lib/pymodules/python2.7/openerp/addons/base_location/better_zip.py", line 53, in name_get res.append((bzip.id, ", ".join(name)))**
TypeError: sequence item 2: expected string or Unicode, bool found
My finale code wont work:
better_zip.py
from openerp.osv import orm, fields
class BetterZip(orm.Model):
" City/locations completion object"
_name = "res.better.zip"
_description = __doc__
_order = "priority"
_columns = {'priority': fields.integer('Priority', deprecated=True),
'name': fields.char('ZIP', required=True),
'city': fields.char('City', required=True),
'state_id': fields.many2one('res.country.state', 'State'),
'country_id': fields.many2one('res.country', 'Country'),
'code': fields.char('City Code', size=64, help="The official code for the city"),
'suburb' : fields.char('Suburb', size=64, help=" "),
'geolat' : fields.char('Geo Lat', size=64, help="Geo Breiten Grad"),
'geolng' : fields.char('Geo Lng', size=64, help="Geo Längen Grad"),
}
_defaults = {'priority': 100}
def name_get(self, cursor, uid, ids, context=None):
res = []
for bzip in self.browse(cursor, uid, ids):
name = [bzip.name, bzip.city, bzip.suburb]
if bzip.state_id:
name.append(bzip.state_id.name)
if bzip.country_id:
name.append(bzip.country_id.name)
res.append((bzip.id, ", ".join(name)))
return res
def onchange_state_id(self, cr, uid, ids, state_id=False, context=None):
result = {}
if state_id:
state = self.pool['res.country.state'].browse(cr, uid, state_id, context=context)
if state:
result['value'] = {'country_id': state.country_id.id}
return result
def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100):
if args is None:
args = []
if context is None:
context = {}
ids = []
if name:
ids = self.search(cr, uid, [('name', 'ilike', name)] + args, limit=limit)
if not ids:
ids = self.search(cr, uid, [('suburb', 'ilike', name)] + args, limit=limit)
if not ids:
ids = self.search(cr, uid, [('city', operator, name)] + args, limit=limit)
return self.name_get(cr, uid, ids, context=context)
compay.py
change from 'city': bzip.city, to 'city': bzip.suburb if bzip.suburb else bzip.city, want work.
Function must by, if empty bzip.subrub use bzip.city
from openerp.osv import orm, fields
class ResCompany(orm.Model):
_inherit = 'res.company'
def on_change_city(self, cr, uid, ids, zip_id, context=None):
result = {}
if context is None:
context = {}
if zip_id:
bzip = self.pool['res.better.zip'].browse(cr, uid, zip_id, context=context)
result = {'value': {'zip': bzip.name,
'country_id': bzip.country_id.id if bzip.country_id else False,
'city': bzip.suburb if bzip.suburb else bzip.city,
'state_id': bzip.state_id.id if bzip.state_id else False
}
}
return result
_columns = {
'better_zip_id': fields.many2one('res.better.zip', 'Location', select=1,
help=('Use the city name or the zip code'
' to search the location')),
}
partner_view.xml
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="view_partner_form" model="ir.ui.view">
<field name="name">res.partner.zip_id.2</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="street2" position="after">
<field name="zip_id"
on_change="onchange_zip_id(zip_id)"
placeholder="City completion"
attrs="{'invisible': [('use_parent_address','=',True)]}"
/>
</field>
</field>
</record>
</data>
</openerp>
worthy note that name_get() method is deprecated in 8.0
May I know where did you find the reference that name_get is deprecated in v8? The online documentation (https://www.odoo.com/documentation/8.0/reference/orm.html) still list them as the methods for Models with no mention of deprecation.
The Odoo New API Guideline (written in Feb 15, 2015) https://media.readthedocs.org/pdf/odoo-new-api-guide-line/latest/odoo-new-api-guide-line.pdf also mentioned that display_name calls name_get under the hood. It does recommends that display_name is to be overridden in v8.0 if only display name need to be changed. The example given of display_name override (https://github.com/odoo/odoo/blob/8.0/openerp/addons/base/res/res_partner.py#L232) also points to a method (in res.partner) which practically returns the return of name_get. I think name_get cannot be considered deprecated.
You are absolutely right. It seems I was confused at the time. Apologies.
You are absolutely right. It seems I was confused at the time. Apologies.