У объекта '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))

и это сработало.

Вернуться на верх