Odoo 9.0 域,三个模型和两个 many2one 域
Odoo 9.0 domain, three models and two many2one fields
我正在尝试根据 'class' 过滤 'types' 的列表以获得特定的 'scenario',但结果要么是空字段,要么是 DataError,具体取决于我用的过滤器。
domain=[('aclass.name', '=', 'aclass_id.name')]
= 一个空的选择字段,
domain=[('aclass.id', '=', 'aclass_id.id')]
=
...
res = self._obj.execute(query, params)
DataError: invalid input syntax for integer: "aclass_id.id"
LINE 1: ...ass".id FROM "test_aclass" WHERE "test_aclass".id = 'aclass_id...
^
这是我的model.py
# -*- coding: utf-8 -*-
from openerp import models, fields, api
class Aclass (models.Model):
_name = 'test.aclass'
name = fields.Char()
description = fields.Text()
class Atype (models.Model):
_name = 'test.atype'
name = fields.Char()
description = fields.Text()
aclass = fields.Many2one('test.aclass')
class Ascenario(models.Model):
_name = 'test.ascenario'
name = fields.Char()
description = fields.Text()
aclass_id = fields.Many2one('test.aclass')
atype_id = fields.Many2one('test.atype', domain=[('aclass.id','=','aclass_id.id')])
和表单视图:
<openerp>
<data>
<record model="ir.ui.view" id="ascenario_form_view">
<field name="name">ascenario.form</field>
<field name="model">test.ascenario</field>
<field name="arch" type="xml">
<form string="Scenario">
<sheet>
<group string="Scenario">
<field name="name"/>
<field name="description"/>
<field name="aclass_id"/>
<field name="atype_id"/>
</group>
</sheet>
</form>
</field>
</data>
</openerp>
ascenario_form_view 中的 atype_id 字段在没有域时正确显示 Atype 列表...
我错过了什么?泰。
应该是这样的,
atype_id = fields.Many2one('test.atype', domain=[('aclass','=',aclass_id)])
在域中写字段作为值时无需在引号中指定字段名称,也无需在此处指定ID。
这是一个更好的答案,比第一个更好的解决方案:
对于动态域,例如当您 select 一个国家时,您将仅显示该国家/地区的州:
class Ascenario(models.Model):
_name = 'test.ascenario'
name = fields.Char()
description = fields.Text()
aclass_id = fields.Many2one('test.aclass')
atype_id = fields.Many2one('test.atype')
@api.onchange('aclass_id')
def daynamic_domain(self):
return {'domain': {'atype_id': [('aclass','=',int(self.aclass_id.id))]}}
但是:
如果你想要像例子中那样的储备,当你 select 一个州时,国家将自动 selected :
class Ascenario(models.Model):
_name = 'test.ascenario'
name = fields.Char()
description = fields.Text()
aclass_id = fields.Many2one(related='atype_id.aclass',readonly=True)
atype_id = fields.Many2one('test.atype',)
我正在尝试根据 'class' 过滤 'types' 的列表以获得特定的 'scenario',但结果要么是空字段,要么是 DataError,具体取决于我用的过滤器。
domain=[('aclass.name', '=', 'aclass_id.name')]
= 一个空的选择字段,
domain=[('aclass.id', '=', 'aclass_id.id')]
=
...
res = self._obj.execute(query, params)
DataError: invalid input syntax for integer: "aclass_id.id"
LINE 1: ...ass".id FROM "test_aclass" WHERE "test_aclass".id = 'aclass_id...
^
这是我的model.py
# -*- coding: utf-8 -*-
from openerp import models, fields, api
class Aclass (models.Model):
_name = 'test.aclass'
name = fields.Char()
description = fields.Text()
class Atype (models.Model):
_name = 'test.atype'
name = fields.Char()
description = fields.Text()
aclass = fields.Many2one('test.aclass')
class Ascenario(models.Model):
_name = 'test.ascenario'
name = fields.Char()
description = fields.Text()
aclass_id = fields.Many2one('test.aclass')
atype_id = fields.Many2one('test.atype', domain=[('aclass.id','=','aclass_id.id')])
和表单视图:
<openerp>
<data>
<record model="ir.ui.view" id="ascenario_form_view">
<field name="name">ascenario.form</field>
<field name="model">test.ascenario</field>
<field name="arch" type="xml">
<form string="Scenario">
<sheet>
<group string="Scenario">
<field name="name"/>
<field name="description"/>
<field name="aclass_id"/>
<field name="atype_id"/>
</group>
</sheet>
</form>
</field>
</data>
</openerp>
ascenario_form_view 中的 atype_id 字段在没有域时正确显示 Atype 列表...
我错过了什么?泰。
应该是这样的,
atype_id = fields.Many2one('test.atype', domain=[('aclass','=',aclass_id)])
在域中写字段作为值时无需在引号中指定字段名称,也无需在此处指定ID。
这是一个更好的答案,比第一个更好的解决方案:
对于动态域,例如当您 select 一个国家时,您将仅显示该国家/地区的州:
class Ascenario(models.Model):
_name = 'test.ascenario'
name = fields.Char()
description = fields.Text()
aclass_id = fields.Many2one('test.aclass')
atype_id = fields.Many2one('test.atype')
@api.onchange('aclass_id')
def daynamic_domain(self):
return {'domain': {'atype_id': [('aclass','=',int(self.aclass_id.id))]}}
但是: 如果你想要像例子中那样的储备,当你 select 一个州时,国家将自动 selected :
class Ascenario(models.Model):
_name = 'test.ascenario'
name = fields.Char()
description = fields.Text()
aclass_id = fields.Many2one(related='atype_id.aclass',readonly=True)
atype_id = fields.Many2one('test.atype',)