AttributeError: 'bool' object has no attribute?
AttributeError: 'bool' object has no attribute?
这是我的职能:
@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' object has no attribute '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'
如果您不修改字段patient_id,它将不会传递到 vals 字典中。如果 patient_id 没有在 UI 中赋值,它将被正确赋值为 False。如果您打印 vals 字典并查看您的日志或标准输出,您应该会发现 patient_id 可能是 False,表明它尚未分配。我可能会在访问它的属性之前做一些评估。
'patient_id': vals['patient_id'] if vals.get('patient_id') else False,
@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.id,
'cat': record.cat,
'test_type_id': record.test_type_id.id,
'state_money':record.state_money,
'Amount_in_date':record.Amount_date,
'type_In': "Reste",
'Amount_In':record.Amount,
'user_id': record.user_id.id,
'type_lev1': "IN",
})
return record
方法"write"没有return任何东西,你可以参考https://www.odoo.com/documentation/10.0/reference/orm.html#odoo.models.Model.write,所以如果你想在写入后得到最新的数据,最好重新浏览数据创建医学实验室,所以我建议:
@api.multi
def write(self, vals):
if vals['Amount'] > 0:
vals['Amount_date'] = fields.Datetime.now()
res=super(MedicalLab, self).write(vals)
record=self.browse(self.ids[0])
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 res
'patient_id': vals['patient_id'],
KeyError: 'patient_id'
它只是突出显示密钥不在 vals 中,而您正在尝试访问。因为你已经通过 [ ] 索引访问它,所以密钥必须在那里,如果你想这样做,那么你应该尝试以下方式。
'patient_id': vals.get('patient_id', False),
它会首先检查字典中的键,如果找不到该键,那么它将return您在下一个参数中指定的默认值。建议始终使用 get 方法。
@Phillip Stack 是绝对正确的,如果字段被修改,您将只能在 write 方法中获得密钥,否则您将无法在 vals 中获得该密钥。
在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)
这是我的职能:
@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' object has no attribute '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'
如果您不修改字段patient_id,它将不会传递到 vals 字典中。如果 patient_id 没有在 UI 中赋值,它将被正确赋值为 False。如果您打印 vals 字典并查看您的日志或标准输出,您应该会发现 patient_id 可能是 False,表明它尚未分配。我可能会在访问它的属性之前做一些评估。
'patient_id': vals['patient_id'] if vals.get('patient_id') else False,
@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.id,
'cat': record.cat,
'test_type_id': record.test_type_id.id,
'state_money':record.state_money,
'Amount_in_date':record.Amount_date,
'type_In': "Reste",
'Amount_In':record.Amount,
'user_id': record.user_id.id,
'type_lev1': "IN",
})
return record
方法"write"没有return任何东西,你可以参考https://www.odoo.com/documentation/10.0/reference/orm.html#odoo.models.Model.write,所以如果你想在写入后得到最新的数据,最好重新浏览数据创建医学实验室,所以我建议:
@api.multi
def write(self, vals):
if vals['Amount'] > 0:
vals['Amount_date'] = fields.Datetime.now()
res=super(MedicalLab, self).write(vals)
record=self.browse(self.ids[0])
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 res
'patient_id': vals['patient_id'],
KeyError: 'patient_id'
它只是突出显示密钥不在 vals 中,而您正在尝试访问。因为你已经通过 [ ] 索引访问它,所以密钥必须在那里,如果你想这样做,那么你应该尝试以下方式。
'patient_id': vals.get('patient_id', False),
它会首先检查字典中的键,如果找不到该键,那么它将return您在下一个参数中指定的默认值。建议始终使用 get 方法。
@Phillip Stack 是绝对正确的,如果字段被修改,您将只能在 write 方法中获得密钥,否则您将无法在 vals 中获得该密钥。
在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)