'@Transient' 不适用于字段
时间: 2023-07-27 11:33:59 浏览: 275
是的,@Transient注解适用于JPA实体类中的属性(字段),而不是字段本身。它的作用是指示JPA框架忽略被注解的属性,不会将其映射到数据库表中。通常,@Transient注解用于标记不需要持久化的属性,例如计算属性、临时变量等。需要注意的是,@Transient注解只对JPA有效,对于其他ORM框架可能没有作用。
相关问题
@Transient' not applicable to field
这个错误通常是在使用Hibernate进行持久化操作时出现的。@Transient注释用于告诉Hibernate不要将注释的字段持久化到数据库中,但是它只适用于非静态字段,因为静态字段不属于对象实例。
解决这个问题的方法是将@Transient注释从静态字段中删除,或者将静态字段转换为非静态字段。如果你确实想要将静态字段排除在持久化操作之外,可以考虑使用XML配置文件或者注释方式来进行配置。
class ApprovalFlow(models.Model): _name = 'approval.flow' _description = u'审批流程' def _compute_domain(self): all_cls = inspect.getmembers(sys.modules[__name__], inspect.isclass) odoo_cls = [getattr(cls[1], '_name') for cls in all_cls if cls[1].__bases__[0].__name__ == 'Model'] # 排除当前的对象 odoo_cls += [model.model for model in self.env['ir.model'].search([('transient', '=', True)])] # 排除临时对象 return [('model', 'not in', odoo_cls)] name = fields.Char(u'名称') model_id = fields.Many2one('ir.model', u'模型', domain=_compute_domain, index=1) model_name = fields.Char(related="model_id.model", string='模型名称') condition = fields.Char(u'条件', help=u'请遵循odoo的domain的写法,如:[("field_name", "=", value)]',store=True) on_create = fields.Boolean(u'创建时', default=False, help=u'记录创建时创建审批流程') company_ids = fields.Many2many('res.company', 'approval_flow_company_rel', 'flow_id', 'company_id', u'适用公司', default=lambda self: [self.env.company.id]) node_ids = fields.One2many('approval.flow.node', 'flow_id', u'流程节点', copy=False) action_ids = fields.One2many('approval.flow.node.action', 'flow_id', u'节点动作', copy=False) commit_approval_group_id = fields.Many2one('res.groups', u'提交审批组', help=u'执行提交审批的组,如果未指定,则记录所属公司的所有用户都可以提交审批') approval_can_run_id = fields.Many2one('execute.function.list', u'完成后能执行方法', help=u'审批流程完成后才能执行的功能,比如确认订单等') approval_can_run = fields.Char(u'完成后能执行方法', help=u'审批流程完成后才能执行的功能,比如确认订单等',related='approval_can_run_id.fun_name',store=True) approval_cannot_run_id = fields.Many2many('execute.function.not.list', 'function_not_rel', u'完成后不能执行操作', help=u'审批流程完成后不能能执行的操作,修改,删除') approval_cannot_run = fields.Char(u'完成后不能执行操作', help=u'审批流程完成后不能能执行的操作,修改,删除',store=True) def unlink(self): audit = self.env['approval.flow'] for record in audit: if record.approval_can_run_id == '删除': raise UserError("不能删除") return super(Rokedispatchordermanagement, self).unlink() 重新删除方法不能删除approval_can_run_id值等于删除的怎么写
您可以这样重新编写 `unlink` 方法:
```python
def unlink(self):
for record in self:
if record.approval_can_run == '删除':
raise UserError("不能删除")
return super(ApprovalFlow, self).unlink()
```
这里需要注意的是,在 `for` 循环中的 `self` 已经是 `approval.flow` 记录集了,不需要再定义一个 `audit` 变量。同时,您需要判断 `approval_can_run` 而不是 `approval_can_run_id`,因为 `approval_can_run` 才是存储了实际值的字段。
阅读全文