为many2one字段

时间:2017-11-29 10:36:12

标签: openerp odoo-10

当用户设置nom_rubrique时,默认设置为many2one fill的值

 class A(models.Model):

    rubrique_id = fields.Many2one('risques.rubrique',
        string='Rubrique',
        default=_default_rubrique,
        index=True,
        track_visibility='onchange',
        change_default=True)

class B(models.Model):
    critere_ids = fields.One2many('risques.critere','rubrique_id',required=True, string="Critére d'évaluation")

3 个答案:

答案 0 :(得分:2)

不仅仅是在xml表单或树的上下文中使用:

 <field field="id" invisible="1"/>
 <field name="critere_ids" context="{'default_rubrique_id': id}" />

但这仅在创建记录并且您尝试修改它时才有效。 您将看到m2o字段字段与您所在的记录相同。

但是当你处于创建模式时,记录不会在那时创建,所以永远不能将它作为默认值传递,而且许多人将保持空状态而不管你做什么。

但即使用户在保存父记录时选择另一条记录,您也会看到所选值已更改为父值。 我的意思是没有用户在该m2o字段上选择的内容,该值将被忽略并被父ID替换。

最好的办法是为你的one2many字段定义一个嵌入式树和表单:

<field name="critere_ids">
     <tree>
         <!-- list of field without rubrique_id field -->
     </tree>
     <form>
        <!-- new form structor  without rubrique_id field -->
     </form>
</field>

因为在one2many字段中,用户根本不需要看到很多人,他知道该记录属于父记录,所以看到它,或者完全选择它。

答案 1 :(得分:1)

您的代码中似乎出现语法错误,请尝试以下解决方案:

您的参考parent_id型号

中也不会退出risques.rubrique字段
class critere(models.Model):
    _name = 'risques.critere'
    _rec_name = 'nom_critere'

    def _default_rubrique(self):
        #here you did mistake , your search method syntex was wrong
        #also it is better to use limit instead of [0] it may raise 
        #error if your search will return empty list
        return self.env['risques.rubrique'].search([('parent_id', '=', False)], limit=1).id

    nom_critere = fields.Char(string="Nom du Critere")
    rubrique_id = fields.Many2one('risques.rubrique',
                                  string='Rubrique',
                                  default=_default_rubrique,
                                  index=True,
                                  track_visibility='onchange',
                                  change_default=True)

class rubrique(models.Model):
    _name = 'risques.rubrique'
    _rec_name = 'nom_rubrique'
    nom_rubrique = fields.Char(string="Rubrique")
    critere_ids = fields.One2many('risques.critere', 'rubrique_id', required=True, string="Critére d'évaluation")

答案 2 :(得分:0)

使用lambda设置默认值:

type = fields.Many2one('your.model',"String to display", default=lambda self: self.env['your.model'].search([('name','=','value you need to set as default')]))

简单。