簡體   English   中英

odoo many2one作為選擇字段

[英]odoo many2one as selection field

我在odoo中創建一個模塊,我想使用many2one作為選擇字段,問題出在城市'ville en francais'的名稱上,下拉菜單有效,並且保存了該城市的ID(來自數據庫),但是名稱類似於obj.ville,1(它顯示模塊的名稱,而不是數據庫中城市的名稱)

表輸出

在此處輸入圖片說明

 class obj_ghotel(osv.osv): _name = "obj.ghotel" _description = "Objet ghotel" def _get_selection(self, cr, uid, context = None): ville_obj = self.pool.get('obj.ville') ville_obj = self.env['obj.ville'] res = [] ville_ids = ville_obj.search(cr, uid, [], context = context) for g in ville_obj.browse(cr, uid, ville_ids, context = context): res.append((g.id, g.nom_ville)) return res _columns = { 'nom_hotel': fields.char( "Nom d'hotel", required=True ), 'adr_hotel': fields.char( "Addresse hotel", required=True ), 'id_ville':fields.many2one('obj.ville','ville', selection=_get_selection), #fields.integer('Id Ville', required=True ), #Foreign key references ville(id) 'id_ville':fields.many2one('ville','ville'), 'image': fields.binary( "Image" ), } 

class obj_ville(osv.osv):
    _name = "obj.ville"
    _description = "Objet ville"


    _columns = {
        'nom_ville': fields.char( "Nom Ville", required=True ),
        'id_hotel':fields.one2many('obj.ghotel','id_ville'),
    }


    _defaults = {
        'Nom Ville': "Name",
    }

您可以使用_rec_name ,如下所示:

酒店型號:

class obj_ghotel(osv.osv):
    _name = "obj.ghotel"
    _description = "Objet ghotel"
    _rec_name = 'nom_hotel'

維爾模型:

class obj_ville(osv.osv):
    _name = "obj.ville"
    _description = "Objet ville"
    _rec_name = 'nom_ville'

問題是當odoo不知道如何表示記錄時,默認情況下,他會向您顯示模型的名稱和記錄的ID。

odoo如何知道如何表示記錄,這是在models.py定義的name_get方法中的don。首先,他尋找_rec_name的值,默認情況下是name我假設您在模型obj.ville沒有字段名obj.ville ,JE pense闕t'asulilisé nom ^^。

因此您需要更改_rec_name

 class Ville(models.Model):
    _name = 'obj.ville'
    _rec_name = 'nom'

您需要定義一個名為name_get的方法,如下所示

def name_get(self, cr, uid, ids, context=None):
    if context is None:
        context = {}
    if isinstance(ids, (int, long)):
        ids = [ids]
    res = []
    for record in self.browse(cr, uid, ids, context=context):
        name = record.nom_ville
        res.append((record.id, name))
    return res

默認情況下,Many2one字段是選擇字段的種類。 首先,您以'name'為屬性為ville創建模型

class OdooVillePerso(models.Model):
    _name = 'odoo.ville.perso'

    name = fields.Char('Ville')

class OdooFinalClass(models.Model):
    _name='odoo.final.class'

    ...

    ville = fields.Many2one('odoo.ville.perso', 'Ville')

之后,您可以在另一個模型中將其稱為Many2one,它會顯示為選擇字段,但不要忘記為該模型創建視圖。

PS:此代碼適用於odoo 10

更好的是,您可以在XML no_open和no_edit中添加選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM