我正在尝试将使用HTML呈现的pdf文件保存到当前的模型字段中,它将引发此错误。
强制转换为Unicode:需要字符串或缓冲区,找到实例
这是代码
def save_to_pdf(template_src, context_dict, pk):
import ipdb; ipdb.set_trace()
instance = get_object_or_404(
Project.objects.filter(pk=pk, is_deleted=False))
template = get_template(template_src)
context = Context(context_dict)
html = template.render(context)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result,link_callback=fetch_resources)
pdfnew=file(pdf)
instance.structural_info.save('structure.pdf',pdfnew)
return True
structural_info是文件字段。 正确的方法是什么?
答案 0 :(得分:1)
如果您查看API Documentation documentation:
请注意,content参数应该是的实例 django.core.files.File,而不是Python的内置文件对象。您可以 从这样的现有Python文件对象构造一个文件
from django.core.files import File
# Open an existing file using Python's built-in open()
f = open('/path/to/hello.world')
myfile = File(f)
因此,如果pdf
是字符串,则可以使用:
from django.core.files.base import ContentFile
myfile = ContentFile(pdf)
instance.structural_info.save('structure.pdf', myfile)