【问题标题】:'Canvas' object has no attribute '_committed'“画布”对象没有属性“_committed”
【发布时间】:2021-10-31 17:22:58
【问题描述】:

我正在尝试将画布对象保存到我的 django 模型字段文件中,但它显示“'Canvas' 对象没有属性 '_committed'”。

p.setTitle(f"{patient.first_name} {patient.last_name}'s Report")
p.showPage()
p.save()

pdf:bytes =buffer.getvalue()
buffer.close()
response.write(pdf)    

r = Result.objects.filter(score="12").update_or_create(file=p)

谁能帮我解决这个问题?

【问题讨论】:

  • 您不能将.update_or_create(..) 用于.filter(..)
  • 对不起,我只是写了这段代码作为示例,只是为了让你们了解我在做什么。

标签: python django reportlab


【解决方案1】:

“您必须将 django 的 File 对象的实例传递给 FileField.save() 才能更改文件字段的内容。它的工作方式与其他类型的模型字段略有不同。”引用自here

【讨论】:

    【解决方案2】:

    您不能在.filter(…) [Django-doc] 之后使用.update_or_create(…) [Django-doc]。您可能想要的是使用:

    Result.objects.update_or_create(
        score='12',
        defaults={'file': p}
    )

    这将p一起工作:p不是一个文件,它是一个Canvas对象。您可以使用文件名,或使用FieldFile object [Django-doc]

    【讨论】:

      【解决方案3】:

      好吧,而不是使用

      buffer =BytesIO()
      buffer.close()
      

      我用过

      buffer.seek(0)
      r = Result.objects.get(pk=result_id)    
      r.file.save(f"{d}.pdf", File(buffer))
      

      它成功了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-05
        • 1970-01-01
        • 2012-04-26
        • 2013-05-09
        • 2018-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多