如何更改OpenERP (Odoo)中many2one字段的显示值?
我正在Odoo(OpenERP)上创建一个新模块,但我无法正确使用一个字段。
(https://i.stack.imgur.com/pKQpT.png)
我可以从另一个类中选择一个字段(这个类在同一个模块里定义),但我需要更改显示的值。
在这个例子中,我有一个字符串“menu,2”,这是字段piatto的值。这个字符串是从ordini类中获取的,使用了一个many2one字段,但我想显示名为nome的字段(在下面的图片中显示)。
(https://i.stack.imgur.com/nQwRL.png)
这是python文件。
class menu(osv.Model):
_name = "menu"
_description = "Menu"
_order = "tipo"
_columns = {
'nome': fields.char('Nome', size=80, required=True),
'tipo': fields.selection([
('antipasto', 'antipasto'),
('primo', 'primo piatto'),
('secondo', 'secondo piatto'),
('contorno', 'contorno'),
('dolce', 'dolce')
], 'Tipo di piatto'),
'prezzo': fields.float('Prezzo', digits=(10,2), required=True),
'ingredienti': fields.text('Lista ingredienti'),
'immagine': fields.binary('Immagine'),
}
_sql_constraints = [('unique_name', 'unique(nome)', 'Il piatto è già presente.')]
class ordini(osv.Model):
_name = "ordini"
_description = "Ordini"
_columns = {
'dipendente': fields.many2one('hr.employee', 'Dipendente', ondelete='set null', required=True),
'dettagli_ids': fields.one2many('ordini.dettagli', 'n_ordine', 'Ordine'),
}
class ordini_dettagli(osv.Model):
_name = "ordini.dettagli"
_description = "Dettagli ordine"
_columns = {
'n_ordine': fields.integer('Ordine', readonly=True),
'piatto': fields.many2one('menu', 'Piatto'),
'qta': fields.integer('Quantità'),
'prezzo_piatto': fields.related('piatto','prezzo',type='float',string='Prezzo',readonly=True),
}
_defaults = {
'qta': 1,
}
编辑:当我选择piatto这个条目时,我还需要更新字段prezzo。
谢谢。
1 个回答
6
你需要指定哪个字段用作对象的名称,这可以通过使用 _rec_name
属性 来实现。在你的情况下:
class menu(osv.Model):
_name = "menu"
_description = "Menu"
_order = "tipo"
_rec_name = 'nome'
# ...
另外,你也可以直接把 nome
改成 name
,因为 name
是 _rec_name
的默认值。