diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-30 12:09:23 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2017-01-30 12:09:23 +0100 |
commit | 93e329748e19443456701b06cf2f57fd33f4399c (patch) | |
tree | c8b1d812a65fa9ab857c492e65928f5e2dee223f /ishtar_common/models.py | |
parent | 15c58b1d1b3ee6972ed70de7ce77d39999344673 (diff) | |
download | Ishtar-93e329748e19443456701b06cf2f57fd33f4399c.tar.bz2 Ishtar-93e329748e19443456701b06cf2f57fd33f4399c.zip |
Fix shortcut menu for baskets - add tests for shortcut menu
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r-- | ishtar_common/models.py | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index f87c1b8de..572bd85e7 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -242,13 +242,27 @@ class OwnPerms: @classmethod def _return_get_owns(cls, owns, values, get_short_menu_class, label_key='cached_label'): + sorted_values = [] + if hasattr(cls, 'BASKET_MODEL'): + owns_len = len(owns) + for idx, item in enumerate(reversed(owns)): + if get_short_menu_class: + item = item[0] + if type(item) == cls.BASKET_MODEL: + basket = owns.pop(owns_len - idx - 1) + sorted_values.append(basket) + sorted_values = list(reversed(sorted_values)) if not values: if not get_short_menu_class: - return sorted(owns, key=lambda x: getattr(x, label_key)) - return sorted(owns, key=lambda x: getattr(x[0], label_key)) + return sorted_values + list( + sorted(owns, key=lambda x: getattr(x, label_key))) + return sorted_values + list( + sorted(owns, key=lambda x: getattr(x[0], label_key))) if not get_short_menu_class: - return sorted(owns, key=lambda x: x[label_key]) - return sorted(owns, key=lambda x: x[0][label_key]) + return sorted_values + list( + sorted(owns, key=lambda x: x[label_key])) + return sorted_values + list( + sorted(owns, key=lambda x: x[0][label_key])) @classmethod def get_owns(cls, user, replace_query={}, limit=None, values=None, @@ -288,7 +302,16 @@ class OwnPerms: raise NotImplementedError( "Call of get_owns with get_short_menu_class option and" " no 'id' in values is not implemented") - items = [(i, cls.get_short_menu_class(i['id'])) for i in items] + my_items = [] + for i in items: + if hasattr(cls, 'BASKET_MODEL') and \ + type(i) == cls.BASKET_MODEL: + dct = dict([(k, getattr(i, k)) for k in values]) + my_items.append( + (dct, cls.BASKET_MODEL.get_short_menu_class(i.pk))) + else: + my_items.append((i, cls.get_short_menu_class(i['id']))) + items = my_items else: items = [(i, cls.get_short_menu_class(i.pk)) for i in items] return items @@ -672,6 +695,10 @@ class Basket(models.Model): def __unicode__(self): return self.label + @property + def cached_label(self): + return unicode(self) + @classmethod def get_short_menu_class(cls, pk): return 'basket' |