python-2.7 - 如何从另一个 Many2many 字段中获取字段值?
问题描述
我使用 odoo 10 并创建了一个自定义模块来计划旅行。我为计划创建了一个视图,我将在其中选择我的旅行列表。我现在的问题是如何知道显示旅行列表的字段是travel_ids = fields.Many2many ('tms.travel', copy = False, string = '游记”)。我尝试了很多但没有结果。请问有什么好办法吗??
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>
解决方案
好的,您在 many2many 关系中缺少一些信息。这就是你需要的。
field_name = fields.Manmy2many('related.model', 'relational_table', 'current_model_id', 'related_model_id', string='other information')
通常我将逆向模型放在相关模型上:
(在 hr.holidays 模型上)
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
推荐阅读
- flutter - 如何在 VSCode 中将 Flutter 项目导出为 ZIP?
- javascript - 初学者在这里。我需要帮助更好地理解这个回调函数
- angular - 通过角度的aws-amplify自动将经过身份验证的google用户添加到cognito用户池?
- purescript - 如何在 Purescript REPL 中提供节点模块?
- json - 有没有办法将 ReactJs 事件附加到从 Ajax JSON 响应动态插入的 HTML?
- javascript - onClick 影响另一个元素但相同的反应组件
- javascript - 如何将 2 个单独的变量上传到 Firebase 数据库?
- python - 计算python中行之间的时间差
- r - 是否可以在仅包含工作日和一些缺失日的时间序列数据框中创建引用 t - k 个工作日的滞后变量?
- python - 在 OpenAI Gym 上实现多处理时出错,“NoneType”对象没有属性“steer”