diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-09-02 10:03:15 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-09-02 10:03:50 +0200 |
commit | 4c18b1c256d7cae3871adc306ab958a408cc2ac5 (patch) | |
tree | 1f8ba20595a7e111cad4cbafb3c2ce8165be7c51 | |
parent | caebc92f6e7f0a3e8445d054edd5587c58920c76 (diff) | |
download | Ishtar-4c18b1c256d7cae3871adc306ab958a408cc2ac5.tar.bz2 Ishtar-4c18b1c256d7cae3871adc306ab958a408cc2ac5.zip |
Fix get_types for operation_types (refs #3179)
-rw-r--r-- | ishtar_common/models.py | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 04077b240..c536b64ae 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -329,29 +329,36 @@ class GeneralType(Cached, models.Model): return u"" @classmethod - def get_types(cls, dct={}, instances=False, exclude=[], empty_first=True, - default=None, initial=None): - types = cls.pre_get_types(dct, instances, exclude, empty_first, - default) - if not initial: - return types + def _get_initial_types(cls, initial, type_pks): + new_vals = [] for value in initial: try: pk = int(value) except ValueError: continue - if pk in [idx for idx, lbl in types]: + if pk in type_pks: continue try: extra_type = cls.objects.get(pk=pk) - types.append((extra_type.pk, unicode(extra_type))) + new_vals.append((extra_type.pk, unicode(extra_type))) except cls.DoesNotExist: continue + return new_vals + + @classmethod + def get_types(cls, dct={}, instances=False, exclude=[], empty_first=True, + default=None, initial=None): + types = cls._pre_get_types(dct, instances, exclude, empty_first, + default) + if not initial: + return types + new_vals = cls._get_initial_types(initial, [idx for idx, lbl in types]) + types += new_vals return types @classmethod - def pre_get_types(cls, dct={}, instances=False, exclude=[], - empty_first=True, default=None): + def _pre_get_types(cls, dct={}, instances=False, exclude=[], + empty_first=True, default=None): # cache cache_key = None if not instances: @@ -2637,7 +2644,7 @@ class OperationType(GeneralType): @classmethod def get_types(cls, dct={}, instances=False, exclude=[], empty_first=True, - default=None): + default=None, initial=[]): tuples = [] dct['available'] = True if not instances and empty_first and not default: @@ -2654,7 +2661,10 @@ class OperationType(GeneralType): if exclude: items = items.exclude(txt_idx__in=exclude) current_preventive, current_lst = None, None - for item in items.order_by(*cls._meta.ordering).all(): + item_list = list(items.order_by(*cls._meta.ordering).all()) + new_vals = cls._get_initial_types(initial, [i.pk for i in item_list]) + item_list += new_vals + for item in item_list: if not current_lst or item.preventive != current_preventive: if current_lst: tuples.append(current_lst) |