Как отсортировать часть текста столбца? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть column_default_sort, установленный на custom_id, формат которого, например, 10/K/2019 Я хочу отсортировать, ищите только часть 10/, чтобы буквы не нарушали сортировку чисел, как настроить ее в колбе -admin? мой текущий column_default_sort=('custom_id')

Ответы [ 2 ]

0 голосов
/ 14 июня 2019

Вы можете предоставить ключ сортировки для столбца, используя column_sortable_list примерно так:

from sqlalchemy.ext.hybrid import hybrid_property
class MyModel(db.Model):
    @hybrid_property
    def formatted_custom_id(self):
        return self.custom_id[0:2] # Whatever your format is

class MyView(BaseModelView):
    column_sortable_list = (('custom_id', (MyModel.formatted_custom_id,)),)
    column_default_sort = (MyModel.formatted_custom_id, False)

В отличие от документации, ключ сортировки должен быть в кортеже, , даже если это только один столбец.Это часть (MyModel.formatted_custom_id,).

0 голосов
/ 23 мая 2019

При чтении исходного кода для BaseModelView становится ясно, что необходимый вам тип фильтрации еще не поддерживается.

См. Код ниже:

column_default_sort = None
# Default sort column if no sorting is applied.

# Examples:

class MyModelView(BaseModelView):
    column_default_sort = 'user'
You can use tuple to control ascending descending order. In following example, items will be sorted in descending order:

class MyModelView(BaseModelView):
    column_default_sort = ('user', True)
If you want to sort by more than one column, you can pass a list of tuples:

class MyModelView(BaseModelView):
    column_default_sort = [('name', True), ('last_name', True)]

# Source code reference
def _get_default_order(self):
        """
            Return default sort order
        """
        if self.column_default_sort:
            if isinstance(self.column_default_sort, list):
                return self.column_default_sort
            if isinstance(self.column_default_sort, tuple):
                return [self.column_default_sort]
            else:
                return [(self.column_default_sort, False)]

        return None

Вы должны найти способ обойти фильтрацию за пределами BaseModelView.

...