python - 将父模型中的 bool 字段检查到行中 - Odoo v8

标签 python odoo odoo-8

我想将父类中的 bool 字段检查到子(行)类中。

class bsi_print_order(models.Model):
    _name = 'bsi.print.order'

    @api.model
    def create(self, vals):
        if vals.get('name', 'New') == 'New':
            vals['name'] = self.env['ir.sequence'].next_by_code('bsi.print.order') or '/'
        return super(bsi_print_order, self).create(vals)

    name = fields.Char('Reference', required=True, index=True, copy=False, readonly='True', default='New')
    date = fields.Date(string="Print Date",default=fields.Datetime.now)
    production_orders = fields.Many2one('bsi.production.order', ondelete='cascade', string="Production Order")
    due_date = fields.Date(string="Due Date")
    journal_entry = fields.Many2one('account.move', string="Journal Entry")
    stock_picking_id = fields.Many2one('stock.picking', string="Stock Picking")
    order_picking = fields.One2many('bsi.print.order.lines', 'print_order', string="Order lines")
    book_block = fields.Boolean(string="Book Block", default=True)
    binding = fields.Boolean(string="Binding")
    edging = fields.Boolean(string="Edging")

class bsi_print_order_lines(models.Model):
    _name = 'bsi.print.order.lines'

    print_order = fields.Many2one('bsi.print.order', string="Print Order")
    isbn = fields.Many2one('product.product', string="ISBN", domain="[('is_isbn', '=', True)]")
    qty = fields.Integer(string="Quantity")
    consumed_qty = fields.Integer(string="Quantity consumed")
    remaining_qty = fields.Float(string="Remaining quantity") #, compute="_remaining_func"
    is_book_block = fields.Boolean(string="Is Book Block Done")
    is_binding = fields.Boolean(string="Is Binding Done")
    is_edging = fields.Boolean(string="Is Edging Done")
    isbns = fields.Many2one('worksheets.isbns', string="Worksheet ISBNS")

因此,当选中 book_block 按钮时,is_book_block 也应该自动选中,与 boundingedging 相同>,他们应该分别检查 is_bindingis_edging

这些是我有的方法:

@api.depends('book_block', 'order_picking', 'order_picking.is_book_block')
def _bool_book_block(self):
    if self.book_block == True:
        order_picking.is_book_block = True
    else:
        order_picking.is_book_block = False

@api.depends('binding', 'order_picking', 'order_picking.is_binding')
def _bool_binding(self):
    if self.binding == True:
        order_picking.is_binding = True
    else:
        order_picking.is_binding = False

@api.onchange('edging', 'order_picking', 'order_picking.is_edging')
def _bool_edging(self):
    if self.edging == True:
        order_picking.is_edging == True
    else:
        order_picking.is_edging == False

但它不起作用,例如,我确实检查了边缘,甚至保存了文档,但行中的 bool 字段没有更改。

有什么想法吗?

最佳答案

当您使用depends时,字段必须具有compute属性:

   some_feild = fiels.SomeType(......., compute='method_name')


   @api.depends('some_field_2', ...)
   def method_name(self):
        # and here the function will be computed.

如果您的字段是 100% 计算字段,那么 odoo 中最好的事情是您 可以监听父类中的变化来计算子字段:

class bsi_print_order(models.Model):
    _name = 'bsi.print.order'
    ....



class bsi_print_order_lines(models.Model):
    _name = 'bsi.print.order.lines'

    is_book_block = fields.Boolean(string="Is Book Block Done", compute="compute_book_block")

    @api.depends('print_order.book_block')
    def compute_book_block(self):

        # in depends it's always a good this to loop
        # or use api.one with depends 
        for rec in self:
            if rec.print_order:
                self.is_book_block = self.print_order.book_block

但只有当该字段始终是计算字段时才可以,我的意思是用户永远不会 从 UI 更改其值。

如果您的字段未计算,并且用户可以根据需要更改该值,则您需要使用 onchange 在父类中。

class bsi_print_order(models.Model):
    _name = 'bsi.print.order'
    ....

    @api.onchange('book_block '):
    def onchange_book_block(self):
        # in onchange no need for loop 
        # because self should always have only one recod
        for line in self.order_picking:
            line.is_book_block = self.book_block

关于python - 将父模型中的 bool 字段检查到行中 - Odoo v8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47429113/

相关文章:

python - 在python脚本中通过ssh执行哪个命令

python - sympy中函数的模块化逆

xml - odoo- 'Field origin does not exist'

javascript - odoo中如何调用网站端widget

python-2.7 - 如何从 Odoo 10 的日历向导中删除删除按钮?

python - 如何有效地将函数应用于数据框中的每一行

python - 如何编写一个python脚本在指定时间自动复制文件而不需要用户手动执行?

pdf - 如何更改 odoo 企业默认报告的页眉和页脚,例如损益表、 Assets 负债表(PDF 格式)

odoo - 从 xml-rpc 调用的@api.onchange

python - 我可以将 Odoo 浏览对象转换为 JSON