Odoo 9.0域,三个模型和两个many2one字段

时间:2016-07-04 22:08:43

标签: xml python-2.7 model openerp odoo-9

我试图过滤一系列'类型'根据他们的班级'对于特定的场景'但它会导致空字段或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列表...

我错过了什么? TY。

2 个答案:

答案 0 :(得分:1)

对于解决方案而言,这是一个更好的答案:

对于动态域,例如选择国家/地区时,您只会显示该国家/地区的状态:

  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))]}}

但是: 如果您想要选择州时的预留状态,则会自动选择国家/地区:

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

答案 1 :(得分:0)

应该是这样的,

 atype_id = fields.Many2one('test.atype', domain=[('aclass','=',aclass_id)])

当您在域中将该字段写为值时,无需在引号中指定字段名称,也无需在那里指定ID。