如何从另一个Many2many字段获取字段值?

时间:2018-11-21 10:13:04

标签: python-2.7 odoo-10

我使用odoo 10,并创建了一个自定义模块来计划行程。我为计划创建一个视图,从中可以选择旅行清单。现在我的问题是,在知道显示行程列表的字段为 travel_ids = fields.Many2many('tms.travel',copy = False, string ='Travels')。我尝试了很多但没有结果。有任何帮助的想法吗??

enter image description here

tms_travel_planning.xml

<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>

    <record id="view_tms_travel_planning_form" model="ir.ui.view">
        <field name="name">view.tms.travel.planning.form</field>
        <field name="model">tms.planning</field>
        <field name="arch" type="xml">
            <form string="Plannification des voyage">
                <header>
                    <field name="state" statusbar_visible="draft,approved,confirmed" widget="statusbar"/>
                </header>
                <sheet>
                <div class="oe_title">
                    <h1>
                        <label class="oe_inline" style="font-size:30px;" string="Plannification - " attrs="{'invisible':[('name','=', False)]}"/>
                        <field name="name" readonly="1"/>
                    </h1>
                </div>
                <group>
                    <group>

                        <field name="datetime"/>
                        <field attrs="{'readonly':[('state','in',('confirmed', 'cancel'))]}" name="operating_unit_id"/>
                    </group>

                    <group>
                        <field name="num_vehicule_dispo"/>
                        <field name="num_chauffeur_dispo"/>

                    </group>
                </group>
                <notebook colspan="1">
                    <page string="Les voyages à planifier">
                        <separator coslpan="4" string="Voyages"/>
                        <!--<field attrs="{'readonly':[('state','in',('confirmed', 'cancel'))]}" name="operating_unit_id"/>-->
                        <field attrs="{'readonly':[('state','in',('confirmed', 'cancel'))]}" colspan="4"
                               domain="[('state','not in',('cancel','closed'))]" name="travel_ids" nolabel="1"/>
                        <separator coslpan="4" string="Véhicules"/>
                        <field  colspan="4" name="fleet_ids" nolabel="1"/>
                        <separator coslpan="4" string="Conducteurs"/>
                        <field  colspan="4" name="employee_ids" nolabel="1"/>

                    </page>

                </notebook>
                </sheet>
            </form>
        </field>
    </record>
</data>
 </odoo>

tms_travel_planning.py

 # -*- coding: utf-8 -*-

from odoo import _, api, fields, models
from odoo.exceptions import ValidationError


class TmsTravelPlanning(models.Model):
_name = 'tms.planning'

name = fields.Char('Num du plannification')
operating_unit_id = fields.Many2one(
    'operating.unit', string='Operating Unit', required=True)
id_planning=fields.Integer(string="Numéro du plannification")
datetime=fields.Date(string="Date")
num_vehicule_dispo=fields.Integer(string="Nombre de véhicule disponible")
num_chauffeur_dispo=fields.Integer(string="Nombre de chauffeur disponible")
tms
fleet_ids = fields.Many2many('fleet.vehicle', copy=False, string='Véhicules')
employee_ids = fields.Many2many('hr.employee', copy=False, string='Conducteurs')

state = fields.Selection([
    ('draft', 'Pending'),
    ('approved', 'Approved'),
    ('confirmed', 'Confirmed'),
    ('cancel', 'Cancelled')], readonly=True,
    help="Gives the state of the Waybill.",
    default='draft')

@api.model
def create(self, values):
    planning = super(TmsTravelPlanning, self).create(values)
    if not planning.operating_unit_id.planning_sequence_id:
        raise ValidationError(_(
            'You need to define the sequence for planning in base %s' %
            planning.operating_unit_id.name
        ))
    sequence = planning.operating_unit_id.planning_sequence_id
    planning.name = sequence.next_by_id()
    print(str(values['num_vehicule_dispo']))
    print(str(values['num_chauffeur_dispo']))
    return planning

tms_travel.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <odoo>
    <record id="view_tms_travel_tree" model="ir.ui.view">
          <field name="name">tms.travel.tree</field>
            <field name="model">tms.travel</field>
         <field name="priority">1</field>
         <field name="arch" type="xml">
            <tree>
                 <field name="name"/>
                <field name="date"/>
              <field name="departure_id"/>
                 <field name="arrival_id"/>
                  <field name="state"/>
                 <button groups="tms.group_traffic,tms.group_expenses" icon="fa-thumbs-up" name="action_progress" states="draft" string="Dispatch Travel" type="object"/>
            <button groups="tms.group_traffic,tms.group_expenses" icon="fa-check-square" name="action_end" states="progress" string="End Travel" type="object"/>
        </tree>
    </field>
</record>
</odoo>

1 个答案:

答案 0 :(得分:0)

好的,您在多对多关系中缺少一些信息。这就是您所需要的。

field_name = fields.Manmy2many('related.model', 'relational_table', 'current_model_id', 'related_model_id', string='other information')

通常我将反模型放在相关模型上,例如:

(在节假日模式上)

payslip_ids = fields.Many2many('hr.payslip', 'hr_payslip_holiday_rel', 'holiday_id', 'payslip_id', ...)

(在hr.payslip模型上)

holiday_ids - fields.Many2many('hr.holidays', 'hr_payslip_holiday_rel', 'payslip_id', 'holiday_id', ...)

然后在某些时候,您需要将一个ID添加到另一个模型中,例如:

holiday.payslip_ids |= current_payslip_id