首页 > 解决方案 > 如何根据两个不同的字段获取一个字段的值

问题描述

所以我创建了一个酒店管理模块。我可以选择根据 bed_type 和 tag 过滤房间。标签包含不同的设施,如空调、电视等。所以用户会来选择一种床型和他想要的设施,在第三个字段中,它应该显示具有给定配置的房间,如果不可用,则应该出现错误消息。所以我创建了一个 onchange 函数来做到这一点,但我不知道如何在其中包含标签。我在odoo v14上做。米

这是房间的模型

from odoo import api, fields, models, _


class HotelRoom(models.Model):
_name = 'hotel.room'
_description = 'hotel room'
_rec_name = 'room_number'


room_number = fields.Char('Room Number', required=True)

room_rent = fields.Monetary('Room Rent')
tag = fields.Many2many('hotel.tags', string='Facilities')

dormitory_count = fields.Integer('Dormitory count')

bed_type = fields.Selection([
    ('single', 'Single'),
    ('double', 'Double'),
    ('dormitory', 'Dormitory')
], required=True, default='other')

这是接待的模型

class HotelAccommodation(models.Model):
    _name = 'accommodation.room'
    _description = 'Reception'

        
bed_type = fields.Selection([
    ('single', 'Single'),
    ('double', 'Double'),
    ('dormitory', 'Dormitory')
], required=True, string= 'Bed type')

state = fields.Selection([
    ('draft','Draft'),
    ('check-in','Check-In'),
    ('check-out', "Check-Out"),
    ('cancel','Cancel'),

], required=True, default='draft', tracking=True)

tag = fields.Many2many('hotel.tags', string='Facilities')

 room_id = fields.Many2one('hotel.room', string='Room')
 

使用它,我可以根据 bed_type 过滤房间,但我也需要标签。我尝试在域内提供它,但它不起作用。

@api.onchange('bed_type')
def filter_room(self):
    for rec in self:
        return {'domain': {'room_id': [('bed_type', '=', rec.bed_type)]}}
        

        

标签: odoo

解决方案


您可以将 _compute 字段与 store 选项一起使用 = True

看看https://www.odoo.com/documentation/14.0/reference/orm.html#computed-fields


推荐阅读