当用户设置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")
答案 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')]))
简单。