微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据两个不同的字段获取一个字段的值

如何解决如何根据两个不同的字段获取一个字段的值

所以我创建了一个酒店管理模块。我可以选择根据 bed_type 和标签过滤房间。标签包含不同的设施,如空调、电视等。因此,用户将来选择床型和他想要的设施,在第三个字段中,它应该显示具有给定配置的房间,如果不可用,应该会出现错误消息。所以我创建了一个 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',string= 'bed type')

state = fields.Selection([
    ('draft','Draft'),('check-in','Check-In'),('check-out',"Check-Out"),('cancel','Cancel'),],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)]}}
        

        

解决方法

您可以使用带有 store 选项 = True 的 _compute 字段

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

,

您还需要将 tag 字段添加到域和 onchange 装饰器中,以便在修改标记字段时调用该方法。

该方法是在包含表单中存在的值的伪记录上调用的,您不需要循环遍历 self。

试试下面的例子:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。