From 18e0f1085666580a53f120017fe0c4c8ff6529f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Mon, 10 Apr 2023 23:48:40 +0200 Subject: [PATCH] split stored files, ID-based names --- .../0033_alter_contractfile_file.py | 19 +++++++++++++ contracts/models.py | 27 ++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 contracts/migrations/0033_alter_contractfile_file.py diff --git a/contracts/migrations/0033_alter_contractfile_file.py b/contracts/migrations/0033_alter_contractfile_file.py new file mode 100644 index 0000000..bf56c07 --- /dev/null +++ b/contracts/migrations/0033_alter_contractfile_file.py @@ -0,0 +1,19 @@ +# Generated by Django 4.1.4 on 2023-04-10 21:45 + +import contracts.models +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('contracts', '0032_alter_signee_address_country'), + ] + + operations = [ + migrations.AlterField( + model_name='contractfile', + name='file', + field=models.FileField(upload_to=contracts.models.get_contract_file_loaction, verbose_name='Soubor'), + ), + ] diff --git a/contracts/models.py b/contracts/models.py index 6df1358..51fa005 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -1,4 +1,6 @@ import datetime +import os +import mimetypes import typing from django.conf import settings @@ -740,6 +742,29 @@ class Contract(NameStrMixin, models.Model): ] + OwnPermissionsMixin.Meta.permissions +def get_contract_file_loaction(instance, filename): + mimetypes_instance = mimetypes.MimeTypes() + + current_time = datetime.datetime.today() + guessed_type = mimetypes_instance.guess_type(filename, strict=False)[0] + + extension = "" + + if guessed_type is not None: + for mapper in mimetypes_instance.types_map_inv: + if guessed_type not in mapper: + continue + + extension = mapper[guessed_type] + break + + return ( + "_private/" + f"{current_time.year}/{current_time.month}/{current_time.day}/" + f"{str(instance.id)}{extension}" + ) + + class ContractFile(NameStrMixin, models.Model): name = models.CharField( max_length=128, @@ -754,7 +779,7 @@ class ContractFile(NameStrMixin, models.Model): file = models.FileField( verbose_name="Soubor", - upload_to="_private/", + upload_to=get_contract_file_loaction, ) contract = models.ForeignKey( -- GitLab