diff options
Diffstat (limited to 'ishtar_common/models.py')
| -rw-r--r-- | ishtar_common/models.py | 41 | 
1 files changed, 32 insertions, 9 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index b5e371b25..48218ba94 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -337,10 +337,14 @@ class GeneralType(models.Model):                  yield (item.pk, _(unicode(item))                         if item and unicode(item) else '') -    PREFIX = "› " +    PREFIX = "│ " +    PREFIX_EMPTY = "  " +    PREFIX_MEDIUM = "├ " +    PREFIX_LAST = "└ "      @classmethod -    def _get_childs(cls, item, dct, prefix=0, instances=False, exclude=[]): +    def _get_childs(cls, item, dct, prefix=0, instances=False, exclude=[], +                    is_last=False):          prefix += 1          dct['parent'] = item          childs = cls.objects.filter(**dct) @@ -348,16 +352,35 @@ class GeneralType(models.Model):              childs = childs.exclude(txt_idx__in=exclude)          if hasattr(cls, 'order'):              childs = childs.order_by('order') -        for child in childs.all(): +        lst = [] +        child_lst = childs.all() +        total = len(child_lst) +        for idx, child in enumerate(child_lst):              if instances:                  child.rank = prefix -                yield child +                lst.append(child)              else: -                yield (child.pk, SafeUnicode(prefix * cls.PREFIX + -                       unicode(_(unicode(child))))) -            for sub_child in cls._get_childs(child, dct, prefix, instances, -                                             exclude=exclude): -                yield sub_child +                p = '' +                cprefix = prefix +                while cprefix: +                    cprefix -= 1 +                    if not cprefix: +                        if (idx + 1) == total: +                            p += cls.PREFIX_LAST +                        else: +                            p += cls.PREFIX_MEDIUM +                    elif is_last: +                        p += cls.PREFIX_EMPTY +                    else: +                        p += cls.PREFIX +                lst.append(( +                    child.pk, SafeUnicode(p + unicode(_(unicode(child)))) +                )) +            for sub_child in cls._get_childs( +                    child, dct, prefix, instances, exclude=exclude, +                    is_last=((idx + 1) == total)): +                lst.append(sub_child) +        return lst      @classmethod      def _get_parent_types(cls, dct={}, instances=False, exclude=[], | 
