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_seo(self, **kwargs): """Заполнение сео-полей/статей для товара, заполнение привязок к статьям (привязваем контейнеры) просто создаем ссылку с сео-полями по ссылке товара, """ if not self.id: return seo_fields = ('seo_title', 'seo_description', 'seo_keywords') linkcontainer = kwargs.get('linkcontainer', []) seo_block = None seo_tag = 'seo_for_products' product_tag = 'product_%s' % self.id link = self.link() seo_container = Containers.objects.filter(state=4, tag=seo_tag).first() if not seo_container: seo_container = Containers.objects.create( state=4, tag=seo_tag, name='Сео-тексты для товаров/услуг') seo_blocks = seo_container.blocks_set.filter( models.Q(tag=product_tag) | models.Q(link=link)) # Если по id не найден блок, # тогда пробуем найти по ссылке if not seo_blocks: seo_block = Blocks( state=4, container=seo_container, tag=product_tag, link=link, ) else: for block in seo_blocks: if block.tag == product_tag: seo_block = block break if not seo_block: seo_block = seo_blocks[0] seo_block.link = link seo_block.name = self.name for key in seo_fields: field = key.replace('seo_', '') setattr(seo_block, field, kwargs.get(key)) seo_block.save() link_containers2block(seo_block, linkcontainer)
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)