2017-02-07 72 views
1

我正在使用分號分隔文件中的導出發票。我創建了一個嚮導來選擇要導出的發票,並且我可以將數據寫入位於my_module/data/invoices.txt中的文件中。現在我想下載這個文件,我在web插件中使用了saveas方法,但是最終出現了404錯誤(我在嚮導中有一個二進制字段(txt_file)將文件內容存儲爲base64編碼數據)。 這裏是我使用的代碼:Odoo:將二進制文本內容作爲文本文件下載

@api.multi 
def export(self): 
    self.ensure_one() 
    if self.invoice_ids: 
     lines = [] 
     for line in self.invoice_ids: 
      str_line = '' 
      str_line += str(line.partner_id.name) + ';' 
      str_line += str(line.number) + ';' 
      str_line += str(line.origin) + ';' 
      str_line += str(line.date_invoice) + ';' 
      str_line += str(line.date_due) + ';' 
      str_line += line.account_id.name + ';' 
      str_line += line.journal_id.name + ';' 
      str_line += str(line.amount_untaxed) + ';' 
      str_line += str(line.amount_total) + ';' 
      str_line = str_line.encode('utf-8') 
      lines.append(str_line) 
     import os.path 

     my_path = os.path.abspath(os.path.dirname(__file__)) 
     path = os.path.join(my_path, "../data/invoices.txt") 

     file = open(path, 'w+') 
     if file: 
      output = '' 
      for line in lines: 
       output += line + '\n' 
      self.txt_file = base64.b64encode(output) 

      file.write(base64.b64decode(self.txt_file)) 
      wizard = self.env['export_invoice.wizard'].with_context({'active_id': self.id}).create({}) 
      # I have found this on the web 
      return { 
       'type': 'ir.actions.act_url', 
       'url': '/web/binary/saveas?model=export_invoice.wizard&field=txt_file&id=%s&filename_field=invoices.txt' % (
       wizard.id), 
       'target': 'self', 
      } 

回答

0

我相信問題可能是在該行

wizard = self.env['export_invoice.wizard'].with_context({'active_id': self.id}).create({}) 

如果這個想法是指定的上下文添加到嚮導,而不以其他方式修改,這樣做不加.create,其中一個空字典稱爲將創建並返回一個空的精靈記錄,其中沒有在文件中的字段的內容,因此404

wizard = self.env['export_invoice.wizard'].with_context({'active_id': self.id}) 

在旁註中,filename_field GET參數需要包含文件名的模型字段名稱,而不是實際的文件名。這不應該中斷下載,但會生成下載文件名稱,而不是指定的名稱。

+0

謝謝@dgeorgiev,我設法下載文件,但我有另一個問題。 '\ n'沒有解釋,有沒有辦法解決這個問題? – guidev224

+0

你的意思是說你使用的文本編輯器不能正確顯示新行嗎?編輯是否有可能期望Windows風格的eols? – dgeorgiev

+0

是@dgeorgiev,這正是發生的事情。也許我不知道,如你所說,編輯期望Windows風格的EOL。 – guidev224

相關問題