2017-04-22 15 views
1

저장 버튼을 클릭하면 양식 다운로드 모델의 form_serial_no 필드에있는 시퀀스를 만들려고합니다. 이 form_serial_no 필드는 동일한 models.py 파일에서 companyname 모델의 company_short_code 필드를 선택하고 7 자리 숫자 (예 : CHN0000001)로 채 웁니다. 여기서 CHN은 company_short_code 필드의 값이고 0000001은 레코드의 첫 번째 시퀀스입니다. 내가 formdownload 테이블 form_serial_no 필드 생성에 대한 기록이없는 검사 할 때동일한 모델 파일에서 다른 클래스의 필드 값을 사용하여 시퀀스 생성

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> 

: 다음은 내 코드 조각입니다. 친절하게 나를 조사하도록 도와주세요.

답변

1

@Emipro Technologies는 시퀀스 코드가 잘못되어 있기 때문에 실제로 작동해야합니다. 순서가 존재하지 않기 때문에 당신은 너무 name=self.env['ir.sequence'].get('formdownload.form_serial_no')에 대한 호출이 False 을 반환됩니다 __openerp__.py 파일에 sequences.xml을 포함하지 않은

  1. :

    나는 그것이 작동하지 않는 이유는 두 가지 이유를 생각한다. 즉, 데이터베이스에 실제로 존재하는 경우 "시퀀스 & 식별자 => 시퀀스"를 확인하십시오.

  2. 변경 사항 : noupdate를 1로 설정하면 데이터베이스에 저장된 xml이 생성 된 후에는 업데이트되지 않습니다. 따라서 시퀀스를 변경하더라도 업데이트되지 않고 함께 작업하게됩니다. 이전 코드

다른 제안 사항.

회사 코드를 선택하고 시퀀스에 연결하는 동적 필드를 만들려고합니다. 시퀀스 접두사는 고정 값이며 동적 일 수 없습니다. 동적 순서 AFAIK이 같은 만드는 방법에 그것을 할 수 있습니다 :

@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 메소드에서 설정됩니다. 여분의 수표는 쓸모가 없습니다.

0

시퀀스를 얻으려면 코드 또는 ID를 전달해야합니다. 코드

  1. 가져 오기는

    name=self.env['ir.sequence'].get('formdownload.form_serial_no') 
    
  2. XML 파일의 코드에서 아이디

    sequence_id=self.env.ref('module_name.ir_sequence_external_id').ids 
    
    name=self.env['ir.sequence'].get_id(sequence_id[0])               
    

함으로써 얻을 것은 formdownload.form_serial_no 입니다

<field name="code">formdownload.form_serial_no</field> 

올바른 결과를 얻지 못하는 이유 때문에 시퀀스를 가져 오는 데 잘못된 코드를 사용했습니다.

이 정보는 도움이됩니다.

+0

귀하의 회신에 감사드립니다. Emipro, 귀하의 조언에 따라 해냈습니다 ...하지만 여전히 똑같습니다. – John