【问题标题】:valueerror: i/o operation on closed file when generating csv file and saving to model in djangovalueerror: 生成 csv 文件并在 django 中保存到模型时对已关闭文件的 i/o 操作
【发布时间】:2021-05-12 03:29:06
【问题描述】:

当我尝试生成 csv 文件并保存到模型时,我收到“valueerror: i/o operation on closed file”

class PaymentReport(View):
def post(self, request):
    client = self.request.user.client
    user = self.request.user
    from_date = request.POST.get('from_date')
    to_date = request.POST.get('to_date')
    with NamedTemporaryFile() as payment_journal:
        
        csv_writer = csv.writer(payment_journal)
        csv_writer.writerow( ['Transaction type','Account reference','Nominal code','Department','Transaction Date'])
        invoice_report = Invoice.objects.filter(client=client,created_at__range=[from_date, to_date],is_self_invoice=True)
        for row in invoice_report:
            
            transaction_type ='Purchase Payment'
            account_reference = '1300'  
            nominal_code ='1200'
            department = 'Forest'
            date = row.created_at.date()
            
          
            
            csv_writer.writerow([transaction_type,account_reference,nominal_code,department,date])
        payment = PaymentDownload.objects.create(client=client,csv_file=File(payment_journal,'payment_download.csv'))  
     
        payment.save()
       
    return redirect(reverse('worker:report_list'))

这里如何将我的 csv 文件保存到 PaymentDownload 表,以便我以后可以下载它并且我的 aws 存储桶是私有的

【问题讨论】:

    标签: python-2.7 django-models django-views django-templates


    【解决方案1】:

    IO operation on closed file 异常是由这个块引起的:

    with NamedTemporaryFile() as payment_journal:
        csv_writer = csv.writer(payment_journal)
        # ...
    payment = PaymentDownload.objects.create(client=client, csv_file=File(payment_journal, 'payment_download.csv'))
    

    由于 dedent,您在 with 块之外使用 payment_journal,它对应于上下文管理器。当到达with 块的末尾时,文件被关闭,您不能再对payment_journal 执行 i/o 操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-18
      • 2013-09-27
      • 1970-01-01
      • 2016-07-21
      • 2015-07-20
      • 1970-01-01
      • 2016-06-13
      • 1970-01-01
      相关资源
      最近更新 更多