在更改odoo 9

时间:2017-04-01 07:21:23

标签: openerp odoo-9

如何在更改其他字段时填充选择选项。例如:

select选项的默认值存储在数据库tbl_car(Audi,Opel,Mercedes,VW,Bmw)中。在其他表tbl_car_user中,我存储car_name和user_name('Peter','Audi')。现在我想在更改user_id(选择用户Peter)后在车选择选项中获取所有车辆不包括奥迪(用户Peter已经使用奥迪)。

也许是这样的:

for car in self.env['tbl.car'].search([]):
    for car_user in self.env['car.user'].search([('user_id','=','self.user_id.id]):
    if (car.name = car_user.name):
       print("DUPLICATE")
    else:
       print("ADD TO SELECT OPTION")

任何简单的解决方案?

2 个答案:

答案 0 :(得分:1)

我的第一个回答是正确的,如果你不想改变选择,我会给出一个解决方案:

创建一个向用户影响汽车的向导:

class AffectCar(model.TransientModel):
    _name = 'affect.user.car.wizard'
    use_id = fields.Many2one(..) # you know how you do it
    car_name = fields.Selection(selection='_get_car_selection', 'Car name')

    def _get_car_selection(self):
     """
       generate a selection for field car_name according to
       the default user_id passed to this form
     """
     # get all car name that this user don't have 
     # generate the selection [('car_name','car_name')..]
     return computed_selection

   def create_user_car(self):
    """ save a new tbbl_car_user record  """
    # this method is called from the form of the wizard
    # save the user_id and the car_name in tbl_car_user 

现在向用户表单添加一个按钮并调用方法打开向导表单,默认情况下是user_id 同一个用户

@api.multi()
def add_car(self):
    """
      open the wizard to add a car
      to this user 
    """
    return {
        'type': 'ir.actions.act_window',
        'view_mode': 'form',
        'view_type': 'form',
        'res_model':'affect.user.car.wizard',
        'target': 'new', 
        'context': {
             # pass the id the the user to the wizard
            'default_use_id': self.id,
        },
        }

在显示弹出窗口时阻止应用程序用户更改user_id的一件事 使用户处于向导的表单视图中invisble =“1”

<record id="add_car_wizard" model="ir.ui.view">
    <field name="name">tax.adjustments.wizard.form</field>
    <field name="model">tax.adjustments.wizard</field>
    <field name="arch" type="xml">
    <form>
        <group>
            <field name="user_id" invisible="1"/>
            <field name="car_name"/>
        </group>
        <footer>
            <button name="create_user_car" string="Add car" type="object" class="oe_highlight"/>
            or 
            <button string="Cancel" special="cancel" />
        </footer>
    </form>
    </field>
</record>

答案 1 :(得分:0)

这种问题不使用Selection,即使你发现这个问题,如果你在下次选择时也不知道它包含的值就编辑了记录,因为odoo会用除了值之外的所有值填充选择它有。您将在选择字段中看到未知值。

但是如果你想这样做,不要使用选择使用many2one将汽车名称的选择更改为Model(数据库中的表格),并使用domain for many many2one field。

你不能通过选择这个逻辑来做这个逻辑可以只选择向导。

field_selection = fields.Selection(selection='generate_selection')

def generate_selection(self):
    # compute selection
    return computed_selection

但是当第一次加载视图时,这种方法有效,现在无法使用onchange事件编辑或更改选择的值。