AttributeError: 'bool' 对象没有属性?

新手上路,请多包涵

这是我的功能:

     @api.multi
    def write(self, vals):
        if vals['Amount'] > 0:
            vals['Amount_date'] = fields.Datetime.now()
            record=super(MedicalLab, self).write(vals)
            self.env['medical.journal'].create({
                'patient_id': record.patient_id,
                'cat': record.cat,
                'test_type_id': record.test_type_id,
                'state_money':record.state_money,
                'Amount_in_date':record.Amount_date,
                'type_In': "Reste",
                'Amount_In':record.Amount,
                'user_id': record.user_id,
                'type_lev1': "IN",
            })
        return record

这是错误:

AttributeError: ‘bool’ 对象没有属性 ‘patient_id’

编辑:

     @api.multi
    def write(self, vals):
        if vals['Amount'] > 0:
            vals['Amount_date'] = fields.Datetime.now()

            self.env['medical.journal'].create({
                'patient_id': vals['patient_id'],
                'cat': vals['cat'],
                'test_type_id': vals['test_type_id'],
                'state_money':vals['state_money'],
                'Amount_in_date':vals['Amount_date'],
                'type_In': "Reste",
                'Amount_In':vals['Amount'],
                'user_id': vals['user_id'],
                'type_lev1': "IN",
            })

        return super(MedicalLab, self).write(vals)

新错误是:

‘patient_id’: vals[‘patient_id’],

KeyError: ‘patient_id’

原文由 Borealis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 573
2 个回答

如果您不修改字段 patient_id,它将不会传递到 vals 字典中。如果未在 UI 中分配 patient_id,它将正确分配一个值 False。如果您打印 vals 字典并查看您的日志或标准输出,您应该会发现 patient_id 可能为 False,表明它尚未分配。在访问它的属性之前,我可能会做一些评估。

  'patient_id': vals['patient_id'] if vals.get('patient_id') else False,

原文由 Phillip Stack 发布,翻译遵循 CC BY-SA 3.0 许可协议

在 write 方法中,我们只获取实际更改的键值。可能会发生其中的 patient_id 未更改的情况。

所以,这就是为什么我们没有从 vals 字典中获取那个键值。

试试这段代码。

在此代码中,当我们没有获取 vals 字典中的键时,我试图从当前记录中获取数据,该记录现在位于自身中。

     @api.multi
    def write(self, vals):
        if vals.get('Amount',False) and vals['Amount'] > 0:
            vals.update({'Amount_date':fields.Datetime.now())

            self.env['medical.journal'].create({
                'patient_id': vals.get('patient_id',False) and vals['patient_id'] or (self.patient_id and self.patient_id.id or False),
                'cat': valds.get('cat',False) and vals['cat'] or (self.cat or False),
                'test_type_id': vals.get('test_type_id',False) and vals['test_type_id'] or (self.test_type_id and self.test_type_id.id or False),
                'state_money':vals.get('state_money',False) and vals['state_money'] or (self.state_money or False),
                'Amount_in_date':vals.get('Amount_date',False) and vals['Amount_date'] or (self.Amount_date or False),
                'type_In': "Reste",
                'Amount_In':vals.get('Amount',False) and vals['Amount'] or (self.Amount or False),
                'user_id': vals.get('user_id',False) and vals['user_id'] or (self.user_id and self.user_id.id or False),
                'type_lev1': "IN",
            })

        return super(MedicalLab, self).write(vals)

原文由 Chavada Viki 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题