Django Encrypt FileField with Fernet object has no attribute '_committed' occurred
Я передаю несколько загрузок pdf в представление из формы. (используя Uppy.XHRUpload)
Я хочу зашифровать их перед сохранением в модели.
Когда я тестирую файлы, они могут быть зашифрованы и сохранены в файл, а затем прочитаны и расшифрованы просто отлично.
Но когда я пытаюсь добавить в модель, я получаю:
'bytes' object has no attribute '_committed' occurred.
Я могу загрузить зачисленный файл, перечитать и затем сохранить, но это будет пустой тратой времени.
Я думал, что это будет так же просто, как:
if request.method == 'POST' and request.FILES:
files = request.FILES.getlist('files[]')
for index, file in enumerate(files):
f = Fernet(settings.F_KEY)
pdf = file.read()
encrypted = f.encrypt(pdf)
PDF_File.objects.create(
acct = a,
pdf = encrypted
)
Модель.
class PDF_File(models.Model):
acct = models.ForeignKey(Acct, on_delete=models.CASCADE)
pdf = models.FileField(upload_to='_temp/pdf/')
Спасибо за помощь.
это потому что вы не можете сохранить encrrypted(bytes) в модель
попробуйте это
from django.core.files.base import ContentFile
for index, file in enumerate(files):
f = Fernet(settings.F_KEY)
pdf = file.read()
encrypted = f.encrypt(pdf)
content_file = ContentFile(encrypted, name=your_filename)
PDF_File.objects.create(
acct = a,
pdf = content_file
)
ссылка отсюда https://docs.djangoproject.com/en/4.0/topics/http/file-uploads/