2016-07-04 61 views
1

我想根据特定“场景”的'类'来过滤'类型'的列表,但它会产生空字段或DataError,具体取决于在我使用的过滤器上。Odoo 9.0域,三个模型和两个many2one字段

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> 

的atype_id场在ascenario_form_view正确地显示在没有域我错过了A型列表...

? TY。

回答

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

它应该是这样的,

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

无需在报价指定字段名,而你写的域值场,没必要在那里指定ID。

+0

感谢您的输入。但是,该选项仍会导致视图表单中的空(atype_id)选择字段。缺了点什么。 – Louis

+0

'test.aclass'中是否有任何数据? –

+0

当然;) - 正如我所提到的,“ascenario_form_view中的atype_id字段在没有域时正确显示Atype列表...”//但atype_id未根据aclass_id过滤 – Louis

相关问题