Я предлагаю добавить новое поле в модель:
class Folder(TimeStampedModel):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
path = CharField(max_length=200)
parent_folder = models.ForeignKey(
'folders.Folder',
on_delete=models.CASCADE,
null=True,
)
Например, если файл имеет parent_1, а parent_1 имеет parent_2, путь к вашему файловому объекту будет сохранен как:
file.path = str(parent_2.id) + "/" + str(parent_1.id) + "/"
Где parent_2_id и parent_1_id - соответственно идентификаторы родителя 2 и родителя 1.
Чтобы найти все файлы, включенные в parent_2, напишите: parent_2_id = str (parent_2.id)
Folder.objects.get(path__contains='parent_2_id')
Для сохранения нового файла вам понадобится полный путь к папке, в которой вы сохраните:
file.path = parent_folder.path
file.save()