Quellcode durchsuchen

[doc2] Fix detecting duplicate directory logic

Jenny Kim vor 9 Jahren
Ursprung
Commit
15b045c
1 geänderte Dateien mit 19 neuen und 15 gelöschten Zeilen
  1. 19 15
      desktop/core/src/desktop/models.py

+ 19 - 15
desktop/core/src/desktop/models.py

@@ -952,21 +952,6 @@ class Directory(Document2):
     proxy = True
 
 
-  def save(self, *args, **kwargs):
-    if self.type != 'directory':
-      self.type = 'directory'
-    if Directory.objects.filter(name=self.name, owner=self.owner).exists():
-      raise Exception('Directory %s %s already exists' % (self.name, self.owner))
-    super(Directory, self).save(*args, **kwargs)
-
-    if Document2.objects.filter(type='directory', owner=self.owner, name=self.name).count() > 1:
-      raise ValidationError(_('Same directory %s for %s already exist') % (self.owner, self.name))
-
-
-  def parent(self):
-    return Document2.objects.get(type='directory', dependencies=[self.pk]) # or name__startswith=self.name
-
-
   def documents(self, types=None, search_text=None, order_by=None):
     documents = self.dependencies.all()  # TODO: perms
 
@@ -982,6 +967,25 @@ class Directory(Document2):
     return documents
 
 
+  def parent(self):
+    return Document2.objects.get(type='directory', dependencies=[self.pk]) # or name__startswith=self.name
+
+
+  def save(self, *args, **kwargs):
+    self.type = 'directory'
+
+    try:
+      directory = Directory.objects.get(name=self.name, owner=self.owner, type='directory')
+      if directory.pk != self.pk:
+        raise ValidationError('Directory for owner %s named %s already exists' % (self.name, self.owner))
+    except Directory.DoesNotExist:
+      pass  # no conflicts
+    except Directory.MultipleObjectsReturned:
+      raise Exception('Found multiple directories for owner %s named %s' % (self.owner, self.name))
+
+    super(Directory, self).save(*args, **kwargs)
+
+
 class Document2Permission(models.Model):
   """
   Combine either: