我正在尝试创建一个序列,该序列将在单击“保存”按钮时位于formdownload模型的form_serial_no字段上。此form_serial_no字段将在相同的models.py文件中选择companyname model的company_short_code字段,并用七(7)位数字填充它,例如CHN0000001,其中CHN是company_short_code字段的值,0000001是记录的第一个序列。 以下是我的代码片段:
models.py代码
class CompanyName(models.Model):
_name = 'companyname'
_rec_name = 'company_name'
company_name = fields.Char(string="Company Name", required=True)
company_short_code = fields.Char(string="Company short code", required=True)
class FormDownload(models.Model):
_name = 'formdownload'
name = fields.Many2one('companyname', string="Company Name", ondelete='cascade',
required=True)
form_serial_no = fields.Char(string="Form Serial No", readonly=True)
status = fields.Boolean(string="Status", default=False)
@api.model
def create(self, vals):
vals['form_serial_no'] = vals['name']
if vals:
vals['form_serial_no'] = self.env['ir.sequence'].get('formdownload')
return super(FormDownload, self).create(vals)
sequences.xml代码
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data noupdate="1">
<!-- Sequence for form download serial number -->
<record id="ref_code_form_serial_no" model="ir.sequence.type">
<field name="name">Sequence for form download serial number</field>
<field name="code">formdownload.form_serial_no</field>
</record>
<record id="seq_form_serial_no" model="ir.sequence">
<field name="name">Sequence for form download serial number</field>
<field name="code">formdownload.form_serial_no</field>
<field name="prefix">company_short_code</field>
<field name="padding">7</field>
<field name="company_id" eval="False"/>
</record>
</data>
</openerp>
当我检查formdownload表时,没有为form_serial_no字段创建记录。请帮我看一下。
答案 0 :(得分:2)
@Emipro Technologies答案实际上对您有用,因为您的序列代码错误。
我怀疑它无法正常工作的两个原因:
您的sequences.xml
文件中未包含__openerp__.py
,因此请致电
name=self.env['ir.sequence'].get('formdownload.form_serial_no')
将返回False
因为序列不存在。换句话说,如果它确实存在于数据库中,请选中“序列和标识符=&gt;序列”。
将<data noupdate=" 1">
更改为noupdate设置为1,这意味着存储在数据库中的xml一旦创建就永远不会更新,因此即使您更改了序列,它也不会更新,你会使用旧代码
其他一些建议。
我可以看到你正在尝试创建一个动态字段,用于选择公司的短代码并将其附加到序列中。序列前缀采用固定值并且不能是动态的,这是获得动态序列的唯一方法AFAIK将在create方法中执行此操作:
@api.model
def create(self, vals):
serial_no = self.env['ir.sequence'].get('formdownload.form_serial_no')
code = self.env['companyname']. \
browse(vals['name']).company_short_code
# merge code and serial number
vals['form_serial_no'] = code + serial_no
return super(FormDownload, self).create(vals)
如果有任何值,您也无需检查vals
。它总是在create方法中设置。所以额外的检查在这里没用。
答案 1 :(得分:0)
要获取序列,您需要传递代码或ID。
按代码获取
public
获取ID
name=self.env['ir.sequence'].get('formdownload.form_serial_no')
在您的xml文件中,代码为 formdownload.form_serial_no
sequence_id=self.env.ref('module_name.ir_sequence_external_id').ids
name=self.env['ir.sequence'].get_id(sequence_id[0])
由于这个原因,您没有得到正确的结果,因此您输错了代码。
这可能会对你有帮助。