2017-03-12 91 views
0

在我的Django View文件中,我需要從元組列表中生成一個CSV文件並將CSV文件存儲到我的模型的FileField中。Django:生成一個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()。刪除()'。

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

回答

-2

刪除實例不會刪除關聯的文件。您可以考慮使用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 

你可以找到文檔here

相關問題