模型的chioce排序及内容变更(多用于字符串)
def sort_choices(choices, reverse=False, v1_funcs=None, v2_funcs=None): """ :param choices: (('a', 'hello'), ('b', 'world'), ) :param reverse: True or False :param v1_funcs: if string, ['lower', 'upper', ...] :param v2_funcs: if string, ['lower', 'upper', ...] :return: tuple, new_choices """ if v1_funcs is None: v1_funcs = [] if v2_funcs is None: v2_funcs = [] new_choices = [] for v1, v2 in sorted(choices, key=lambda item: item[0], reverse=reverse): for name in v1_funcs: func = getattr(v1, name, None) v1 = func() if func else v1 for name in v2_funcs: func = getattr(v2, name, None) v2 = func() if func else v2 new_choices.append((v1, v2)) return tuple(new_choices)