Odoo:one2many字段仍然添加记录,即使我在其上没有库存时引发错误

2024-05-18 02:10:28 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我的想法是,当我更换产品时,它会检查当前分支上的可用库存,如果没有,它会引发错误,即没有库存

预期行为:当所选产品上没有可用库存时,会引发错误,如果没有可用库存,则不会将记录添加到树视图中

当前行为:当所选产品上没有可用库存,但记录仍添加到one2many树状视图时,会引发错误

代码如下

# -*- coding: utf-8 -*-
from docutils.nodes import line

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

class CustomTransRequest(models.Model):
    _name = 'custom.trans.request'
    _description = 'Transfer Request'
    user_id = fields.Many2one('res.users', string='Salesperson', default=lambda self: self.env.user)
    branch_from_id = fields.Many2one('custom.branch', string="From", required=True)
    branch_to_id = fields.Many2one('custom.branch', string="To", required=True)
    product_ids = fields.One2many(comodel_name="custom.trans.line", inverse_name="request_id", string="Products",
                                  required=False, )
class CustomTransLine(models.Model):
    _name = 'custom.trans.line'
    _description = 'Transfer Request Line'

    branch_from_id = fields.Many2one(comodel_name="custom.branch", string="Branch", )
    request_id = fields.Many2one("custom.trans.request", string="Request ID", )
    product_id = fields.Many2one("custom.product", string="Product", required=True, )
    qty = fields.Integer(string="Qty")

    @api.onchange('product_id')
    def onchange_product(self):
        if self.product_id:
            for rec in self:
                selected_lines = rec.env['custom.branch.line'].search(
                    ['&', ('product_id', '=', rec.product_id.id), ('branch_id', '=', rec.branch_from_id.id)]).mapped(
                    'qty')
                if not selected_lines:
                    raise ValidationError(
                        _('Current branch has ZERO stock on this product, Please select an available Product'))

enter image description here


Tags: namefromselfbranchidfieldstransstring
1条回答
网友
1楼 · 发布于 2024-05-18 02:10:28

如果不希望记录到one2many字段中,请设置product_id=False。并返回验证字典

尝试以下代码

@api.onchange('product_id')
def onchange_product(self):
    if self.product_id:
        res = {}
        selected_lines = rec.env['custom.branch.line'].search(
            ['&', 
             ('product_id', '=', self.product_id.id), 
             ('branch_id', '=', self.branch_from_id.id)]).mapped('qty')
        if not selected_lines:
            self.product_id = False
            res['warning'] = {'title': _('ValidationError'),
                              'message': _(
                                      'Current branch has ZERO stock on this product, '
                                      'Please select an available Product')}
            return res

相关问题 更多 >