def render_tag(self, context, instance, model_type, descendants, varname):
        if instance:
            if descendants == DESCENDANTS_TYPE_ALL:
                children = instance.tree.get().get_descendants()
            elif descendants == DESCENDANTS_TYPE_DIRECT:
                children = instance.tree.get().get_children()
        else:
            children = TreeItem.objects.root_nodes()

        if model_type:
            ModelClass = None
            for model_cls in get_catalog_models():
                if model_cls._meta.model_name == model_type:
                    ModelClass = model_cls
            if ModelClass is not None:
                allowed_ids = children.filter(
                    content_type__model=model_type).values_list('object_id',
                                                                flat=True)
                queryset = ModelClass.objects.filter(id__in=allowed_ids, show=True).order_by('tree__tree_id', 'tree__lft')
            else:
                queryset = []
        else:
            queryset = get_content_objects(children)
        if varname:
            context[varname] = queryset
            return u''
        else:
            context['children'] = queryset
            return render_to_string(self.template, context)
Пример #2
0
    def render_tag(self, context, instance, model_type, descendants, varname):
        if instance:
            if descendants == DESCENDANTS_TYPE_ALL:
                children = instance.tree.get().get_descendants()
            elif descendants == DESCENDANTS_TYPE_DIRECT:
                children = instance.tree.get().get_children()
        else:
            children = TreeItem.objects.root_nodes()

        if model_type:
            ModelClass = None
            for model_cls in get_catalog_models():
                if model_cls._meta.model_name == model_type:
                    ModelClass = model_cls
            if ModelClass is not None:
                allowed_ids = children.filter(
                    content_type__model=model_type).values_list('object_id',
                                                                flat=True)
                queryset = ModelClass.objects.filter(id__in=allowed_ids,
                                                     show=True).order_by(
                                                         'tree__tree_id',
                                                         'tree__lft')
            else:
                queryset = []
        else:
            queryset = get_content_objects(children)
        if varname:
            context[varname] = queryset
            return u''
        else:
            context['children'] = queryset
            return render_to_string(self.template, context)
def add_btns():
    """
    Get add object buttons for every registered catalog models
    """
    models_info = []
    for model in get_catalog_models():
        model_name = model.__name__
        if model._meta.verbose_name:
            model_name = model._meta.verbose_name

        models_info.append([reverse('admin:{0}_{1}_add'. \
                                    format(model._meta.app_label,
                                           model._meta.model_name)),
                            model_name])
    return {'models_info': models_info, }
Пример #4
0
def add_btns():
    """
    Get add object buttons for every registered catalog models
    """
    models_info = []
    for model in get_catalog_models():
        model_name = model.__name__
        if model._meta.verbose_name:
            model_name = model._meta.verbose_name

        models_info.append([reverse('admin:{0}_{1}_add'. \
                                    format(model._meta.app_label,
                                           model._meta.model_name)),
                            model_name])
    return {'models_info': models_info, }
Пример #5
0
    def get_node_data(self, treeitem):
        """
        :param treeitem: TreeItem object
        :return: JSON data of TreeItem object and his content_object
        """
        node = {}
        obj = treeitem.content_object
        if treeitem.parent is None:
            node['parent'] = '#'
        else:
            node['parent'] = treeitem.parent.id
        if obj.leaf is True:
            node['type'] = 'leaf'
        node['id'] = treeitem.id
        node['text'] = treeitem.__unicode__()
        node['data'] = {}
        change_link = reverse('admin:{0}_{1}_change'. \
                              format(obj.__class__._meta.app_label,
                                     obj.__class__.__name__.lower()),
                              args=(obj.id,))
        copy_link = reverse('admin:{0}_{1}_add'. \
                            format(obj.__class__._meta.app_label,
                                   obj.__class__._meta.model_name)) + \
                    '?copy={}'.format(treeitem.id)

        node['data']['change_link'] = change_link
        node['data']['copy_link'] = copy_link

        if obj.leaf is False:
            node['data']['add_links'] = []
            for model_cls in get_catalog_models():
                node['data']['add_links'].\
                    append({
                           'url': reverse('admin:{0}_{1}_add'. \
                                          format(model_cls._meta.app_label,
                                                 model_cls._meta.model_name))
                                  + '?target={}'.format(treeitem.id),
                           'label': _(u'Add %(model_name)s') %
                                    {
                                    'model_name': model_cls._meta.verbose_name
                                    }
                           })
        return node
Пример #6
0
    def get_node_data(self, treeitem):
        """
        :param treeitem: TreeItem object
        :return: JSON data of TreeItem object and his content_object
        """
        node = {}
        obj = treeitem.content_object
        if treeitem.parent is None:
            node['parent'] = '#'
        else:
            node['parent'] = treeitem.parent.id
        if obj.leaf is True:
            node['type'] = 'leaf'
        node['id'] = treeitem.id
        node['text'] = treeitem.__unicode__()
        node['data'] = {}
        change_link = reverse('admin:{0}_{1}_change'. \
                              format(obj.__class__._meta.app_label,
                                     obj.__class__.__name__.lower()),
                              args=(obj.id,))
        copy_link = reverse('admin:{0}_{1}_add'. \
                            format(obj.__class__._meta.app_label,
                                   obj.__class__._meta.model_name)) + \
                    '?copy={}'.format(treeitem.id)

        node['data']['change_link'] = change_link
        node['data']['copy_link'] = copy_link

        if obj.leaf is False:
            node['data']['add_links'] = []
            for model_cls in get_catalog_models():
                node['data']['add_links'].\
                    append({
                           'url': reverse('admin:{0}_{1}_add'. \
                                          format(model_cls._meta.app_label,
                                                 model_cls._meta.model_name))
                                  + '?target={}'.format(treeitem.id),
                           'label': _(u'Add %(model_name)s') %
                                    {
                                    'model_name': model_cls._meta.verbose_name
                                    }
                           })
        return node
Пример #7
0
from catalog.models import TreeItem


def insert_in_tree(sender, instance, **kwargs):
    """
    Create TreeItem object after content object created
    """
    created = kwargs.pop('created', False)
    if created:
        tree_item = TreeItem(parent=None, content_object=instance)
        tree_item.save()
    else:
        tree_item = instance.tree.get()
        if tree_item.get_slug() and \
                        instance.full_path() != cache.get(instance.cache_url_key()):
            instance.clear_cache()


def delete_content_object(sender, instance, **kwargs):
    """
    Delete children nodes and content object after TreeItem deleted
    """
    for child in instance.get_children():
        child.delete()
    if instance.content_object:
        instance.content_object.delete()

for model_cls in get_catalog_models():
    signals.post_save.connect(insert_in_tree, sender=model_cls)

signals.post_delete.connect(delete_content_object, sender=TreeItem)
Пример #8
0

def insert_in_tree(sender, instance, **kwargs):
    """
    Create TreeItem object after content object created
    """
    created = kwargs.pop('created', False)
    if created:
        tree_item = TreeItem(parent=None, content_object=instance)
        tree_item.save()
    else:
        tree_item = instance.tree.get()
        if tree_item.get_slug() and \
                        instance.full_path() != cache.get(instance.cache_url_key()):
            instance.clear_cache()


def delete_content_object(sender, instance, **kwargs):
    """
    Delete children nodes and content object after TreeItem deleted
    """
    for child in instance.get_children():
        child.delete()
    if instance.content_object:
        instance.content_object.delete()


for model_cls in get_catalog_models():
    signals.post_save.connect(insert_in_tree, sender=model_cls)

signals.post_delete.connect(delete_content_object, sender=TreeItem)