From b8990c8e73f47b39686b9419c0e14d06decace5b Mon Sep 17 00:00:00 2001 From: hungdztrau123 Date: Mon, 17 Jun 2024 16:25:53 +0700 Subject: [PATCH] fix:duplicate-folder --- ...ments_folder_unique_name_owner_and_more.py | 21 +++++++++++++++++++ ...ts_warehouse_unique_name_owner_and_more.py | 21 +++++++++++++++++++ src/documents/models.py | 3 +++ src/documents/serialisers.py | 16 ++++++++++---- src/documents/views.py | 8 ------- 5 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 src/documents/migrations/1056_remove_folder_documents_folder_unique_name_owner_and_more.py create mode 100644 src/documents/migrations/1057_remove_warehouse_documents_warehouse_unique_name_owner_and_more.py diff --git a/src/documents/migrations/1056_remove_folder_documents_folder_unique_name_owner_and_more.py b/src/documents/migrations/1056_remove_folder_documents_folder_unique_name_owner_and_more.py new file mode 100644 index 000000000..85b8664d1 --- /dev/null +++ b/src/documents/migrations/1056_remove_folder_documents_folder_unique_name_owner_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.11 on 2024-06-17 08:36 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '1055_folder_checksum'), + ] + + operations = [ + migrations.RemoveConstraint( + model_name='folder', + name='documents_folder_unique_name_owner', + ), + migrations.RemoveConstraint( + model_name='folder', + name='documents_folder_name_uniq', + ), + ] diff --git a/src/documents/migrations/1057_remove_warehouse_documents_warehouse_unique_name_owner_and_more.py b/src/documents/migrations/1057_remove_warehouse_documents_warehouse_unique_name_owner_and_more.py new file mode 100644 index 000000000..ff6feef78 --- /dev/null +++ b/src/documents/migrations/1057_remove_warehouse_documents_warehouse_unique_name_owner_and_more.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.11 on 2024-06-17 08:56 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('documents', '1056_remove_folder_documents_folder_unique_name_owner_and_more'), + ] + + operations = [ + migrations.RemoveConstraint( + model_name='warehouse', + name='documents_warehouse_unique_name_owner', + ), + migrations.RemoveConstraint( + model_name='warehouse', + name='documents_warehouse_name_uniq', + ), + ] diff --git a/src/documents/models.py b/src/documents/models.py index b28d9061d..459cc4689 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -149,6 +149,7 @@ class Warehouse(MatchingModel): class Meta(MatchingModel.Meta): verbose_name = _("warehouse") verbose_name_plural = _("warehouses") + constraints = [] def __str__(self): return self.name @@ -166,8 +167,10 @@ class Folder(MatchingModel): ) class Meta(MatchingModel.Meta): + verbose_name = _("folder") verbose_name_plural = _("folders") + constraints = [] def __str__(self): return self.name diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 926fc3b3a..c3766b933 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -1828,11 +1828,19 @@ class WorkflowSerializer(serializers.ModelSerializer): class AdjustedNameField(serializers.CharField): def to_internal_value(self, data): - model = self.parent.Meta.model - + model = self.parent.Meta.model + print(data) if hasattr(model, 'name'): - - existing_names = model.objects.filter(name__startswith=data).values_list('name', flat=True) + parent_folder = self.parent.initial_data.get('parent_folder') + type = self.parent.initial_data.get('type') + + if type: + existing_names = model.objects.filter(type=type).values_list('name', flat=True) + elif parent_folder: + existing_names = model.objects.filter(parent_folder=parent_folder).values_list('name', flat=True) + + else: + existing_names = model.objects.filter(name__startswith=data).values_list('name', flat=True) if data in existing_names: data = self.generate_unique_name(data, existing_names) diff --git a/src/documents/views.py b/src/documents/views.py index 03f470f1f..3a13c40e4 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -1941,10 +1941,6 @@ class WarehouseViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): if serializer.is_valid(raise_exception=True): parent_warehouse = serializer.validated_data.get('parent_warehouse',None) - existing_warehouse = Warehouse.objects.filter(name=serializer.validated_data['name'], owner=request.user).first() - if existing_warehouse: - return Response({'error': 'A warehouse with the same name already exists.'}, status=status.HTTP_400_BAD_REQUEST) - parent_warehouse = Warehouse.objects.filter(id=parent_warehouse.id if parent_warehouse else 0).first() if serializer.validated_data.get("type") == Warehouse.WAREHOUSE and not parent_warehouse: @@ -2133,10 +2129,6 @@ class FolderViewSet(ModelViewSet, PermissionsAwareDocumentCountMixin): if serializer.is_valid(raise_exception=True): parent_folder = serializer.validated_data.get('parent_folder',None) - existing_folder = Folder.objects.filter(name=serializer.validated_data['name'], owner=request.user).first() - if existing_folder: - return Response({'error': 'A folder with the same name already exists.'}, status=status.HTTP_400_BAD_REQUEST) - parent_folder = Folder.objects.filter(id=parent_folder.id if parent_folder else 0).first() if parent_folder == None: