diff --git a/contracts/migrations/0033_alter_contractfile_file.py b/contracts/migrations/0033_alter_contractfile_file.py new file mode 100644 index 0000000000000000000000000000000000000000..bf56c070772fb50c7862cba7479d131701f828ab --- /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 6df13582b4bececd35459f36f07ee9a90a945dda..51fa00576f41bcf193fcdc85b8d58a87db4932cb 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(