Skip to main content
 首页 » 编程设计

python之Django:生成 CSV 文件并将其存储到 FileField

2025年05月04日38haluo1

在我的 Django View 文件中,我需要从元组列表生成 CSV 文件并将 CSV 文件存储到我的模型的 FileField 中。

class Bill(models.Model): 
    billId = models.IntegerField() 
    bill = models.FileField(upload_to='bills') 

我在这个网站上搜索,找到了一些帖子,例如 Django - how to create a file and save it to a model's FileField? ,但解决方案可以帮助我。

我需要把CSV文件存放在'media/bills/'文件夹中,希望CSV文件能和数据库中的Bill对象一起删除。

我尝试了以下代码,但不能满足我的要求。对于每个文件,它将生成两个文件“output.csv”和“output_xxesss.csv”。调用'Bill.objects.all().delete()'无法删除这两个文件。

path = join(settings.MEDIA_ROOT, 'bills', 'output.csv') 
print path 
f = open(path, 'w+b') 
f.truncate() 
csvWriter = csv.writer(f) 
csvWriter.writerow(('A', 'B', 'C')) 
for r in rs: 
    print r 
    csvWriter.writerow(convert(r)) 
 
bill = Bill() 
bill.billId = 14 
bill.bill.save('output.csv', File(f)) 
bill.save() 

谢谢

我尝试了下面的代码,但它不能通过调用'Bill.objects.all().delete()'来删除文件。

bill = Bill() 
bill.billId = 14 
bill.bill.name = 'bills/output.csv' 
bill.save() 

请您参考如下方法:

如果有人像我一样来到这篇文章并且想知道如何将 csv 文件直接保存到 models.FileField 我推荐这种方式:

import csv 
from io import StringIO 
from django.core.files.base import ContentFile 
 
row = ["Name", "Location", "Price"] 
 
csv_buffer = StringIO() 
csv_writer = csv.writer(csv_buffer) 
csv_writer.writerow(row) 
 
csv_file = ContentFile(csv_buffer.getvalue().encode('utf-8')) 
 
bill.bill.save('output.csv', csv_file)