BAE*_*BAE 7 python csv django filefield
在我的 Django 视图文件中,我需要从元组列表生成一个 CSV 文件,并将该 CSV 文件存储到我的模型的 FileField 中。
class Bill(models.Model):
    billId = models.IntegerField()
    bill = models.FileField(upload_to='bills')
我在这个网站上搜索,发现了一些帖子,例如Django - 如何创建文件并将其保存到模型的 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()
Sch*_*nge 11
如果有人像我一样来到这篇文章并且想知道如何将 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)
Raj*_*war -5
删除实例不会删除关联的文件。您可以考虑使用signals精确的pre_delete. 您可以编写一个接收器,在其中可以删除关联的文件。
from django.dispatch import receiver
from django.db.models.signals import pre_delete 
@receiver(pre_delete)
def func_name(sender, instance, **kwargs):
    your logic
您可以在此处找到文档。
| 归档时间: | 
 | 
| 查看次数: | 2905 次 | 
| 最近记录: |