2017-03-12 6 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? 같은 일부 게시물을 찾았지만 솔루션은 나에게 도움이 될 수 있습니다.

'media/bills /'폴더에 CSV 파일을 저장해야하는데, 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

인스턴스를 삭제해도 연결된 파일은 삭제되지 않습니다. 정확한 pre_delete으로 signals을 사용하는 것이 좋습니다. 관련 파일을 삭제할 수있는 수신기를 작성할 수 있습니다.

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 문서를 찾을 수 있습니다.