Принятый ответ, безусловно, является хорошим решением, но я пошел по пути создания CSV и обслуживания его с точки зрения.
#Model
class MonthEnd(models.Model):
report = models.FileField(db_index=True, upload_to='not_used')
import csv
from os.path import join
#build and store the file
def write_csv():
path = join(settings.MEDIA_ROOT, 'files', 'month_end', 'report.csv')
f = open(path, "w+b")
#wipe the existing content
f.truncate()
csv_writer = csv.writer(f)
csv_writer.writerow(('col1'))
for num in range(3):
csv_writer.writerow((num, ))
month_end_file = MonthEnd()
month_end_file.report.name = path
month_end_file.save()
from my_app.models import MonthEnd
#serve it up as a download
def get_report(request):
month_end = MonthEnd.objects.get(file_criteria=criteria)
response = HttpResponse(month_end.report, content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename=report.csv'
return response
Думал, что это стоит того, чтобы поставить это здесь, так как мне потребовалосьнемного возиться, чтобы получить все желаемое поведение (перезаписать существующий файл, сохранить в нужном месте, не создавать дубликаты файлов и т. д.).
Django 1.4.1
Python 2.7.3