如何在Odoo 8中动态添加域

时间:2017-06-02 16:14:15

标签: odoo-8

我使用Odoo 8 API v8,我想在一个字段中动态添加一个域。 我有2节课。母亲购买

TMP_BESOIN = {}
TMP_BESOIN['type']= ''


_name = 'purchase.besoin'
_description = "Expression du besion d'achat"

name = fields.Char(required=True,string="Reference",default='XXX',readonly=True)
employee_id = fields.Many2one('hr.employee', string="Demandeur", required=True)

date_expression_besoin = fields.Datetime(string="Date d'expression", required=True,default=fields.Datetime.now())

demandeprix_id = fields.Many2one('purchase.demandeprix.ligne', string='Demande de prix')

lignebesoin_ids = fields.One2many('purchase.besoin.ligne','besoin_id', string='Le besoin')

type = fields.Selection([('product', 'Produit stockable'), ('consu', 'Utilisation directe'), ('immo', 'Immobilisation')],
'Type d\'articles',defaut='product')

order_ids = fields.One2many('purchase.order','besoin_id', string='Le besoin')

destination = fields.Char(string='destination')

demandeprix_ids = fields.One2many('purchase.demandeprix','besoin_id', string='ligne demande de prix')

date_reject = fields.Datetime(string="Date de rejet", readonly=True)

user_reject = fields.Many2one('hr.employee', 'Rejété par', readonly=True)

date_validate = fields.Datetime(string="Date de Validation", readonly=True)

user_validate = fields.Many2one('hr.employee', 'validé par', readonly=True)

date_authorized = fields.Datetime(string="Date de d'autorisation", readonly=True)

user_authorized = fields.Many2one('hr.employee', 'autorisé par', readonly=True)

date_wait_authorisation = fields.Datetime(string="Date de transmition pour autorisation", readonly=True)

user_wait_authorisation = fields.Many2one('hr.employee', 'Transmit par', readonly=True)

date_done = fields.Datetime(string="Date de clôture", readonly=True)

user_done = fields.Many2one('hr.employee', 'clôturé par', readonly=True)

motivation = fields.Text('Designation')
state = fields.Selection([('draft', 'Brouillon'),
                                ('reject', 'Besoin annulé'),
                                ('validate', 'Besoin validé'),
                                ('stock_verified', 'Stock vérifié'),
                                ('wait_authorized', 'En attente d\'autorisation'),
                                ('authorized', 'Autorisé')
                                ], 'Etat',required=True,default='draft')

_sql_constraints = [
('ref_besoin_achat_uniq', 'unique(name)', 'La reference du besoin est unique'),
]

@api.model
def create(self,vals):
    if not vals.has_key('name') or vals.get('name')=='XXX':
        vals['name'] = self.env['ir.sequence'].get('purchase.besoin.achat.code') or 'XXX'
    return super(purchase_besoin,self).create(vals)

@api.onchange('type')
def on_change_type(self):
    global TMP_BESOIN
    TMP_BESOIN = {}
    TMP_BESOIN['type'] = self.type

此类定义了全局变量TMP_BESOIN,并将值放在方法onchange_tye

这个类与另一个classe ligne_besoin

有关

class purchase_besoin_ligne(models.Model):

_name = 'purchase.besoin.ligne'
_description = "Ligne du besoin d'achat"

name = fields.Char('Nom', readonly=True, store=True)

besoin_id = fields.Many2one('purchase.besoin', string='Besoin', required=True, ondelete='cascade')

besoin = TMP_BESOIN.copy()

produit_id = fields.Many2one('product.product', string="Article", required=True,domain=[('product_tmpl_id.type', 'like', besoin['type'])])

qte = fields.Integer(string="Quantité", required=True,default=1)

type = fields.Selection([('product', 'Produit stockable'), ('consu', 'Utilisation directe'), ('immo', 'Immobilisation')],
'Type d\'articles',defaut=besoin['type'])

就像在我的代码中一样,我想在produit_id中添加一个域,其中域的值取决于Mother类中的变量类型。

因为在调用create方法之前我不能拥有变量besoin_id的值(与母类的链接)。我决定使用全局变量

问题是,过滤器不会在没有错误的情况下应用。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:假设该类型是produit_id域中product.product的列。

_name = 'purchase.besoin.ligne'
_description = "Ligne du besoin d'achat"

name = fields.Char('Nom', readonly=True, store=True)

besoin_id = fields.Many2one('purchase.besoin', string='Besoin', required=True, ondelete='cascade')

besoin = TMP_BESOIN.copy()

produit_id = fields.Many2one('product.product', string="Article", required=True,domain=[('type', 'like', besoin_id.type])])

qte = fields.Integer(string="Quantité", required=True,default=1)

type = fields.Selection([('product', 'Produit stockable'), ('consu', 'Utilisation directe'), ('immo', 'Immobilisation')],'Type d\'articles',defaut=besoin['type'])