将字段域从一对多过滤到一对一

时间:2019-01-22 10:09:45

标签: python python-2.7 odoo odoo-10

例如,我有一个one2many字段,其中包含3个带有2个不同值的字段。 假设区域是一个one2many字段

  

A区=汽车= 3000,自行车= 2000。

     

B区=汽车= 2500,自行车= 1500。

     

C区=汽车= 2000,自行车= 1000。

然后我有很多字段供以后选择的字段(例如汽车和自行车)

和rate_fields作为计算的触发字段(以后存储值的地方)

关键是我要选择“ A”区域,然后在many2one字段中选择“ Car”

rate字段的输出为3000

,如果我选择区域“ B”,则选择“自行车” 费率字段的输出为1500

如果用代码编写,则该实现将使用具有域语法“多个条件”的按域过滤。 有人可以帮我做一个示例代码吗?

也许这是参考,但我无法编写适当的代码

多种条件

在编程中

  

如果a = 5或(b!= 10且c = 12)

在Open ERP域过滤器中

  

['|',('a','=',5),('&',('b','!=',10),('c','=',12)) ]

https://stackoverflow.com/a/19070664/9228786

提前谢谢

1 个答案:

答案 0 :(得分:0)

我引用了your other question以获得更多详细信息,但是您的问题都令人困惑。据我了解,您的目标是选择一个区域,然后选择一种车辆类型。根据您的选择,您想要查看费率。

无论您想进行哪种模型计算,都需要一个字段来选择区域,一个字段来选择车辆类型以及一个字段来存储费率。

您其他问题的课程有点混乱,所以这是我的建议。

您需要一个模型来跟踪(1)位置/区域,(2)车辆类型,(3)每个位置/区域对每种车辆类型收取的费率,以及(4)一个模型来计算给定位置/区域上的给定车辆类型。

class ParkingLocation(models.Model):
    _name = 'parking.location'
    _description = 'Parking Zones'

    name = fields.Char(string='Name')

class VehicleType(models.Model):
    _name = 'vehicle.type'
    _description = 'Types of Vehicles'

    name = fields.Char(string='Name')

class ZoneRate(models.Model):
    _name = 'zone.rate'
    _description = 'Define the rate for each Vehicle Type in each Zone'

    location_id = fields.Many2one('parking.location', string='Location', required='True')
    vehicle_type_id = fields.Many2one('vehicle.type', string='Vehicle Type')
    rate = fields.Float('Rate')

class ZoneRateLookup(models.Model):
    _name = 'zone.rate.lookup'
    _description = 'Calculate the rate for the chosen Zone and Vehicle Type'

    location_id = fields.Many2one('parking.location', string='Location', required='True')
    vehicle_type_id = fields.Many2one('vehicle.type', string='Vehicle Type')
    rate = fields.Float('Rate', compute='_compute_rate', store=True, readonly=True)

    @api.multi
    @api.depends('location_id', 'vehicle_type_id')
    def _compute_rate(self):
        rate_lookup_obj = self.env['zone.rate.lookup']
        for zone_rate in self:
            rate = rate_lookup_obj.search([('location_id', '=', zone_rate.location_id.id),
                                                     ('vehicle_type_id', '=', zone_rate.vehicle_type_id.id)])
            if not rate:
                raise ValidationError(_('No Rate found for that Vehicle Type in that Zone!')
            zone_rate.rate = rate.rate