У объекта 'Canvas' нет атрибута '_committed'
Я пытаюсь сохранить объект canvas в файл поля моей модели django, но он говорит "'Canvas' object has no attribute '_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)
Может ли кто-нибудь помочь мне с этой проблемой?
"Вы должны передать экземпляр объекта File от django в FileField.save()
, чтобы изменить содержимое поля file. Это работает немного иначе, чем другие типы полей модели." Цитируется из здесь
Вы не можете использовать .update_or_create(…)
[Django-doc] после .filter(…)
[Django-doc]. Вероятно, вы хотели использовать:
Result.objects.update_or_create(
score='12',
defaults={'file': p}
)
Однако это не будет работать с p
: p
- это не файл, это объект Canvas
. Вы можете использовать имя файла или работать с FieldFile
объектом [Django-doc].
Ну вместо того, чтобы использовать
buffer =BytesIO()
buffer.close()
Я использовал
buffer.seek(0)
r = Result.objects.get(pk=result_id)
r.file.save(f"{d}.pdf", File(buffer))
и это сработало.