2017-08-03 17 views
0

私が必要とするのは、一度、名前を選択するために検索するときに患者を選択することです。選択した患者に関連するラボのみを表示したい(patient_idは患者でなければなりません)。ダイナミックドメインの操作方法

私のクラス:

class labinvoice (models.Model): 
 
    _name = "lab.invoice" 
 

 
    order_line = fields.One2many('lab.order.line', 'order_id', string='Order Lines', copy=True) 
 
    nameLab = fields.Many2one('medical.lab.patient',related='order_line.namelab') 
 
    patient = fields.Many2one('medical.patient',related='order_line.patient_id') 
 
    patient_id = fields.Many2one(comodel_name='medical.patient',required=True,) 
 
    
 
class LabOrderLine(models.Model): 
 
    _name = 'lab.order.line' 
 
    
 
    nameLab = fields.Many2one(
 
     string='Lab', 
 
     comodel_name='medical.lab.patient', 
 
     required=True, 
 
     ondelete='cascade', 
 
    ) 
 

 
    patient= fields.Many2one(
 
     'medical.patient', 
 
     string='patient', 
 
     related='nameLab.patient_id', 
 
     readonly=True, 
 
     required=True, 
 
    )

私の見解:

<record id="view_invoice_lab_form" model="ir.ui.view"> 
 
      <field name="name">lab.invoice.form</field> 
 
      <field name="model">lab.invoice</field> 
 
      <field name="arch" type="xml"> 
 
       <form string="Labs Invoices" class="o_sale_order"> 
 
       <sheet> 
 
        <div class="oe_title"> 
 
         <h1> 
 
          <field name="name" readonly="1"/> 
 
         </h1> 
 
        </div> 
 
        <group> 
 
         <group> 
 
          <field name="patient_id" /> 
 
         </group> 
 
         
 
        </group> 
 
        <notebook> 
 
         <page string="Order Lines"> 
 
          <field name="order_line" mode="tree,kanban"> 
 
           <tree string="labs Order Lines" editable="bottom" > 
 
            <field name="nameLab" /> 
 
            <field name="patient" /> 
 
           </tree>         
 
          </field> 
 
         </page> 
 
       </notebook> 
 
      </sheet>  
 
      </form> 
 
     </field> 
 
    </record>

私がやろうとしてmをよ何がsaleOrderのようなものではなく、顧客を選択しますここで私は患者を選び、プロダクトを選ぶのではなく、 ULDは、患者に関連nameLabを選ぶ選びまし

EDITS

@api.onchange('patient_id') 
 
    def onchange_patient(self): 
 
     if self.patient_id: 
 
     #to clean the line everytime i change the patient 
 
      self.order_line = False 
 
      return {'domain':{'nameLab':[('patient','=',self.patient_id.id)]}}

は、問題はあなたがdomainを探しているone2many関係

答えて

0

によるものだと思いますあなたのフィールドにPythonやXMLで設定することができますが、通常XMLはそれを使用する最も一般的な方法です。

あなたのフォームが今設計されているので、このアップデートを行うでしょう。

<field name="nameLab" domain="[('partner_id', '=', partner)]"/>

詳細はdocumentationを参照してください。

+0

名前を返しません.Lab – Borealis

+0

あなたの質問を完全なビューとエラーで更新できますか? – travisw

+0

私はした、編集を参照して – Borealis

1

親okkのこれを変更することができます!関数はのonchange自体のドメインを返すことができますので、我々はこれを扱っている

...のような

- >

api.onchange( '患者')@

デフonchange_patient(自己):

if self.patient: 
    return {'domain':{'namelab':[('id','in',self.patient.namelab.ids)]}} 

それは

ヴィシュヌを助けることを考え

+0

urの答えに感謝します。AttributeError: 'medical.patient'オブジェクトにはオブジェクトがありません。属性 'namelab' – Borealis

+0

あなたは 'onchange'を使う必要はありません。この場合、ドメインで行うことができ、よりクリーンなソリューションになります。 – travisw

+0

私はドメインとonchangeで無駄な仕事をしました。結果はありません...問題はorder_line(one2many) – Borealis