1

我有一个父模型(Plant),它在上下文中默认发送active_id(plant_id):

class Plant(models.Model):
    _name = 'db.plant'
    _description = 'db.plant'
    name = fields.Char("Name", required=True)
    ...

具有多对一关系的植物视图:

<odoo>
  <data>

    <record id="plant_list_view" model="ir.ui.view">
        <field name="name">db.plant.view</field>
        <field name="model">db.plant</field>
        <field name="arch" type="xml">
            <tree>
                <field name="name"/>
                ...
            </tree>
        </field>
    </record>

    <record id="plant_form_view" model="ir.ui.view">
        <field name="name">db.form.view</field>
        <field name="model">db.plant</field>
        <field name="arch" type="xml">
            <form>
                <sheet>
                    <group string="Plant">
                        <field name="name"/>
                        ...
                    </group>
                    <group string="Components">
                        <notebook>
                            <page string="Data Sources">
                                <field name="data_source_ids" context="{'default_plant_id': active_id}">
                                    <tree >
                                        <field name="name"/>
                                        ...
                                        <!-- <field name="plant_id"/> -->
                                    </tree>
                                </field>
                            </page>
                        </notebook>
                    </group>
                </sheet>
            </form>
        </field>
    </record>

    <record id="plant_action" model="ir.actions.act_window">
        <field name="name">plant</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">db.plant</field>
        <field name="view_mode">tree,form</field>
    </record>

</data>

和他的子模型(Data_source)

class DataSource(models.Model):
    _name = 'db.data_source'
    _description = 'db.data_source'

    name = fields.Char("Name", required=True)
    plant_id = fields.Many2one('db.plant', name="Plant", required=True)

数据源视图

<odoo>
  <data>
    <record id="data_source_list_view" model="ir.ui.view">
        <field name="name">db.data_source.view</field>
        <field name="model">db.data_source</field>
        <field name="arch" type="xml">
            <tree>
                <field name="name"/>
                ...
            </tree>
        </field>
    </record>

    <record id="data_source_form_view" model="ir.ui.view">
        <field name="name">db.form.view</field>
        <field name="model">db.data_source</field>
        <field name="arch" type="xml">
            <form>
                <group>
                    <field name="name"/>
                    ...
                </group>
                <group>
                    <field name="plant_id" domain="[('id', '=', context.default_plant_id)]" />
                </group>
                <group>
                </group>
            </form>
        </field>
    </record>

    <record id="data_source_action" model="ir.actions.act_window">
        <field name="name">Data Source</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">db.data_source</field>
        <field name="view_mode">tree,form</field>
    </record>
</data>

我知道在孩子中收到了default_plant_id,因为 plaint_id 域仅过滤了我的 plant_id,但我无法将其自动设置为默认值。我需要单击列表并选择我的 plant_id(这是列表中的唯一元素)。

我还尝试通过两种方式在子项(data_source)中添加@api.on_change("plant_id") :

选项 1

    @api.onchange('plant_id')
    def onchange_plant_id(self):
    if self.plant_id:
        context = dict(self._context or {})
        return [(0,0,{'plant_id': context.get('default_plant_id')})] 

给我这个例外

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/albertocrespo/tools/odoo/odoo/http.py", line 640, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/Users/albertocrespo/tools/odoo/odoo/http.py", line 316, in _handle_exception
    raise exception.with_traceback(None) from new_cause
AttributeError: 'list' object has no attribute 'get'

选项 2(我不确定要发送什么作为响应,但write语句也不起作用):

    @api.onchange('plant_id')
    def onchange_your_many_to_one_field(self):
      context = dict(self._context or {})
      self.plant_id.write({'id':context.get('default_plant_id')})})
      res = {}
      return res

在保存之前,我需要在 data_source 视图中自动选择我的植物作为选项。

4

1 回答 1

0

xml 端不需要 onchange 方法或任何东西 - 上下文级别。您可以简单地plant_id在关系 one2many field 中使用 field data_source_ids

试试这个:

data_source_ids = fields.One2many("db.data_source", "plant_id")
于 2021-11-03T15:41:46.093 回答