2017-08-16 2 views
0

Afin de pouvoir sélectionner plus facilement un lot/lot en fonction de la durée de vie minimale requise, je souhaite afficher la valeur de la variable use_date (du module product.expiry) à côté du numéro de lot dans la vue 'stock.view_pack_operation_lot_form'.Accéder à la valeur enfant du champ many2one dans la vue

La vue (appartenant au modèle stock.pack.operation) est défini comme suit (par défaut):

<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> 

Le champ pack_lot_ids est défini comme One2Many en référence aux « stock.pack.operation .lot 'dans le modèle' stock.pack.operation '. 'stock.pack.operation.lot' a un champ lot_id qui est défini comme Many2one avec une référence à 'stock.production.lot'. 'stock.production.lot' contient le champ use_date que je veux ajouter à la vue.

Ma première tentative était d'ajouter le champ en notation point comme suit: "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> 

Ce qui a provoqué l'erreur suivante:

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] 

J'ai trouvé alors this et this poste sur SO suggérant une définition comme sous-vue:

<!-- ... --> 
<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> 
<!-- ... --> 

Cette fois il n'a pas jeté une erreur, mais au lieu du champ use_date il a ajouté le champ lot_id une deuxième fois.

Tout indice indiquant comment ajouter le champ use_date à côté du numéro de lot est apprécié!

vous

Répondre

1

pouvez créer un domaine connexe dans le modèle stock.pack.operation.lot:

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

et vous pouvez ensuite l'ajouter à votre vue:

<!-- ... --> 
    <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> 
<!-- ... --> 

J'espère que cela vous aide

+0

Merci @Dayana, en attendant, j'ai aussi opté pour un champ similaire à celui que vous suggérez - cependant, use_date est un champ Datetime, donc il devrait être use_date = fields.Datetime (...). ;) Comme Odoo est une nouveauté pour moi et que j'apprends encore comment ça marche 'dans les coulisses', je suis quand même intéressé par une solution d'affichage de use_date sans modifier un modèle. Jusqu'à présent, j'ai supposé que l'on pouvait suivre des relations sans limitation dans une vue et donc afficher les données de modèles apparentés sans changer le modèle auquel la vue est assignée. Savez-vous si mon hypothèse est fausse? – coreuter

+1

Dans les vues, vous ne pouvez pas accéder aux champs à l'aide de la notation par points. Vous devez créer des champs dans les modèles ou vous devez créer des champs connexes afin de les afficher dans les vues. J'espère que vos doutes sont éclaircis. – Dayana