2017-08-16 40 views
0

爲了能夠根據最短生命週期要求更容易地選擇批/批,我希望顯示變量use_date(of module product.expiry)的值在視圖'stock.view_pack_operation_lot_form'中的批號旁邊。在視圖中訪問many2one字段的子值

視圖(屬於模型stock.pack.operation)被定義如下(默認):

<record id="view_pack_operation_lot_form" model="ir.ui.view"> 
<!-- ... --> 
    <field name="pack_lot_ids" nolabel="1" attrs="{'readonly': [('state', '=', 'done')]}"> 
     <tree editable="bottom" decoration-success="qty_todo==qty" 
       decoration-danger="(qty_todo &gt; 0) and (qty&gt;qty_todo)"> 
      <field name="lot_name" invisible="not context.get('only_create', False)"/> 
      <field name="lot_id" invisible="context.get('only_create', False)" 
        domain="[('product_id','=', parent.product_id)]" 
        context="{'default_product_id': parent.product_id, 'active_pack_operation': parent.id}"/> 
      <field name="qty_todo" 
        invisible="not context.get('show_reserved') or context.get('serial') or context.get('state_done')" 
        readonly="1"/> 
      <field name="qty" invisible="context.get('serial')"/> 
      <button name="do_minus" type="object" icon="fa-minus-square" attrs="{'invisible': [('qty', '&lt;=', 0.99)]}" 
        invisible="not context.get('show_reserved') or context.get('state_done')"/> 
      <button name="do_plus" type="object" icon="fa-plus-square" attrs="{'invisible': [('plus_visible', '=', False)]}" 
        invisible="not context.get('show_reserved') or context.get('state_done')"/> 
      <field name="plus_visible" invisible="1"/> 
     </tree> 
    </field> 
<!-- ... --> 
</record> 

pack_lot_ids參照「stock.pack.operation定義爲One2many 。''在模型'stock.pack.operation'中。 'stock.pack.operation.lot'有一個字段lot_id它被定義爲Many2one並引用'stock.production.lot'。 'stock.production.lot'包含我想添加到視圖中的字段use_date

我第一次嘗試是添加在點標記字段,如下「reference.field_name」:

<record id="stock_pack_operation_lots_form_inherit" model="ir.ui.view"> 
    <field name="name">stock.pack.operation.lots.form.inherit</field> 
    <field name="model">stock.pack.operation</field> 
    <field name="inherit_id" ref="stock.view_pack_operation_lot_form"/> 
    <field name="arch" type="xml"> 
     <field name="lot_id" position="after"> 
      <field name="lot_id.use_date"/> 
     </field> 
    </field> 
</record> 

引起以下錯誤:

Error context: 
View `stock.pack.operation.lots.form` 
[View_id: 722, xml_id: stock.view_pack_operation_lot_form, model: stock.pack.operation, parent_id: n/a] 

我隨後發現thisthis後在SO上建議一個定義爲子視圖:

<!-- ... --> 
<field name="arch" type="xml"> 
    <field name="lot_id" position="after"> 
     <field name="lot_id" nolabel="1"> 
      <tree> 
       <field name="use_date"/> 
      </tree> 
     </field> 
    </field> 
</field> 
<!-- ... --> 

這一次它沒有拋出錯誤,但它不是第use_date而是第二次添加字段lot_id

任何提示如何添加use_date字段旁邊的批號感激!

回答

1

您可以創建模型stock.pack.operation.lot相關領域:

use_date = fields.Char(string='Use date', related='lot_id.use_date') 

,然後你可以將其添加到您的視圖:

<!-- ... --> 
    <field name="pack_lot_ids" nolabel="1" attrs="{'readonly': [('state', '=', 'done')]}"> 
     <tree editable="bottom" decoration-success="qty_todo==qty" 
       decoration-danger="(qty_todo &gt; 0) and (qty&gt;qty_todo)"> 
      <field name="lot_name" invisible="not context.get('only_create', False)"/> 
      <field name="lot_id" invisible="context.get('only_create', False)" 
        domain="[('product_id','=', parent.product_id)]" 
        context="{'default_product_id': parent.product_id, 'active_pack_operation': parent.id}"/> 
      <field name="use_date" /> 
      <field name="qty_todo" 
        invisible="not context.get('show_reserved') or context.get('serial') or context.get('state_done')" 
        readonly="1"/> 
      <field name="qty" invisible="context.get('serial')"/> 
      <button name="do_minus" type="object" icon="fa-minus-square" attrs="{'invisible': [('qty', '&lt;=', 0.99)]}" 
        invisible="not context.get('show_reserved') or context.get('state_done')"/> 
      <button name="do_plus" type="object" icon="fa-plus-square" attrs="{'invisible': [('plus_visible', '=', False)]}" 
        invisible="not context.get('show_reserved') or context.get('state_done')"/> 
      <field name="plus_visible" invisible="1"/> 
     </tree> 
    </field> 
<!-- ... --> 

我希望這可以幫助您

+0

謝謝@Dayana,在此期間,我也選擇了一個相關的字段,如你所建議的 - 然而,use_date是一個日期時間字段,因此它應該是use_date = fields.Datetime(...)。 ;) 由於Odoo對我來說很新穎,我仍然在學習它如何在幕後工作,但我仍然對顯示use_date的解決方案感興趣,而不修改模型。到目前爲止,我認爲可以在視圖中無限制地遵循關係,從而顯示相關模型的數據,而不會改變視圖分配給的模型。你知道我的假設是錯誤的嗎? – coreuter

+1

在視圖中,您無法使用點符號訪問字段。您需要在模型中創建字段,或者您必須創建相關字段才能在視圖中顯示它們。我希望你的疑慮得到解決。 – Dayana