openpyxl 保存到实例字段 django
openpyxl save to instance field django
我想在每次使用 POST 提交表单时插入一个 excel sheet 文件。但是,文件必须先前在视图中生成,然后插入到instance.field.
型号:
class Order(models.Model):
...
attachment = \
models.FileField(\
_("Sheet"),
upload_to='uploads/',
max_length=100,
blank=True, null=True)
...
查看:
from openpyxl import Workbook
from openpyxl.writer.excel import save_virtual_workbook
class Order1(View):
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
obj = form.save(commit=False)
#Creating sheet
book = Workbook()
sheet = book.active
sheet['A1'] = 56
sheet['A2'] = 43
now = time.strftime("%x")
sheet['A3'] = now
#Calling model field instance - What im doing wrong here?
obj.attachment = book.save("sample.xlsx")
#Saving model instance
obj.save()
#Some return - required for AJAX
return JsonResponse({"status": "OK"})
除附件字段外的所有保存。我在这里做错了什么?
不能这样直接保存文件。保存后需要以二进制读取模式打开,然后将其传递给 File 构造函数:
from django.core.files import File
from openpyxl import Workbook
from openpyxl.writer.excel import save_virtual_workbook
class Order1(View):
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
obj = form.save(commit=False)
#Creating sheet
book = Workbook()
sheet = book.active
sheet['A1'] = 56
sheet['A2'] = 43
now = time.strftime("%x")
sheet['A3'] = now
#Calling model field instance - What im doing wrong here?
book.save("sample.xlsx")
with open('sample.xlsx', 'rb') as f:
obj.attachment.save("sample.xlsx", File(f), save=False)
#Saving model instance
obj.save()
#Some return - required for AJAX
return JsonResponse({"status": "OK"})
我想在每次使用 POST 提交表单时插入一个 excel sheet 文件。但是,文件必须先前在视图中生成,然后插入到instance.field.
型号:
class Order(models.Model):
...
attachment = \
models.FileField(\
_("Sheet"),
upload_to='uploads/',
max_length=100,
blank=True, null=True)
...
查看:
from openpyxl import Workbook
from openpyxl.writer.excel import save_virtual_workbook
class Order1(View):
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
obj = form.save(commit=False)
#Creating sheet
book = Workbook()
sheet = book.active
sheet['A1'] = 56
sheet['A2'] = 43
now = time.strftime("%x")
sheet['A3'] = now
#Calling model field instance - What im doing wrong here?
obj.attachment = book.save("sample.xlsx")
#Saving model instance
obj.save()
#Some return - required for AJAX
return JsonResponse({"status": "OK"})
除附件字段外的所有保存。我在这里做错了什么?
不能这样直接保存文件。保存后需要以二进制读取模式打开,然后将其传递给 File 构造函数:
from django.core.files import File
from openpyxl import Workbook
from openpyxl.writer.excel import save_virtual_workbook
class Order1(View):
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
obj = form.save(commit=False)
#Creating sheet
book = Workbook()
sheet = book.active
sheet['A1'] = 56
sheet['A2'] = 43
now = time.strftime("%x")
sheet['A3'] = now
#Calling model field instance - What im doing wrong here?
book.save("sample.xlsx")
with open('sample.xlsx', 'rb') as f:
obj.attachment.save("sample.xlsx", File(f), save=False)
#Saving model instance
obj.save()
#Some return - required for AJAX
return JsonResponse({"status": "OK"})