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',)