def recursive_fill_blocks(container, blocks: list, parent_block, parents: str, blocks_path: str): """Рекурсивное создание блоков контейнера :param container: контейнер блоков :param blocks: блоки, которые надо создать в контейнере :param parent_block: родительский блок :param parents: родительский блок :param blocks_path: путь к изображениям блоков """ for json_obj in blocks: if not parents == json_obj['parents']: continue block = Blocks(container=container) for k, v in json_obj.items(): if k in ('img', 'id', 'parents', 'container'): continue setattr(block, k, v) if parent_block: block.parents = '%s_%s' % (parent_block.parents or '', parent_block.id) block.save() imga = json_obj.get('img') if imga: copy_file(os.path.join(blocks_path, imga), os.path.join(block.get_folder(), imga)) Blocks.objects.filter(pk=block.id).update(img=imga) # Теперь надо найти подблоки этого блока recursive_fill_blocks( container, blocks, block, '%s_%s' % (json_obj['parents'] or '', json_obj['id']), blocks_path)
def fill_catalogue(branches: list, container: Containers, parent: Blocks = None): """Заполнить каталог иерархией :param branches: рубрики :param container: контейнер каталога :param parents: родительский блок """ for branch in branches: if branch['name'].startswith('__'): continue tag = 'cat_%s' % branch['id'] analog = container.blocks_set.filter(tag=tag).first() if not analog: analog = Blocks(tag=tag, container=container) analog.name = branch['name'] if parent: root_parents = parent.parents if parent.parents else '' analog.parents = '%s_%s' % (root_parents, parent.id) analog.state = 4 analog.save() sub_branches = branch.get('branches') if sub_branches: fill_catalogue(sub_branches, container, analog)