我正在尝试向crm.lead模型添加一个序列字段。我已经为之前构建的另一个自定义模块实现了这段代码,没有任何问题。
我添加了新字段
class vox_crm_register(models.Model):
_inherit = 'crm.lead'
name_seq = fields.Char(
string='Registration Reference',
required=True,
copy=False,
readonly=True,
index=True,
default=lambda self: _('New'))
我重写了创建函数
@api.model
def create(self, vals):
print(vals.get('name_seq'))
if vals.get('name_seq', _('New')) == _('New'):
print('IF is true')
vals['name_seq'] = self.env['ir.sequence'].next_by_code('vox_crm_register.sequence') or _('New')
res = super(vox_crm_register, self).create(vals)
return res
这是我的序列
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="registration_sequence" model="ir.sequence">
<field name="name">Registration Sequence</field>
<field name="code">vox_crm_register.sequence</field>
<field name="prefix">reg</field>
<field name="padding">3</field>
<field name="company_id" eval="False"/>
</record>
</data>
</odoo>
这是的观点
<xpath expr="//sheet/group" position="replace">
<div class="oe_title">
<h1><field name="name_seq"/></h1>
</div>
</xpath>
创建函数中打印语句的结果是
无
IF为真
因为它是继承的,我必须以某种方式强制它还是添加上下文???
感谢的任何帮助
视图定义中不存在name_seq
。
来自约束文件:
只有当修饰方法中声明的字段包含在create
或write
调用中时,才会触发
@constrains
。这意味着视图中不存在的字段在创建记录期间不会触发调用。
您可以推断,如果视图中不存在字段,则其值将不存在于create
或write
方法中。
编辑:
当您单击"保存"按钮时,将调用saveRecord函数以返回其值已修改的字段名列表,创建方法中将使用相同的列表。
由于name_seq
字段是只读的,因此它不会出现在创建值中。
我发现了睡眠不足和愚蠢的问题。我更改了序列的代码值,没有从Odoo中删除旧序列。由于序列具有noupdate标记,它不会创建新的序列,但也不会更新。感谢Kenly的回复。