【发布时间】:2019-05-23 06:58:22
【问题描述】:
我将column_default_sort 设置为custom_id,例如10/K/2019 我想排序只查找10/ 部分,这样字母就不会破坏数字排序,如何在烧瓶中设置它-行政?
我现在的column_default_sort=('custom_id')
【问题讨论】:
标签: python flask flask-admin
我将column_default_sort 设置为custom_id,例如10/K/2019 我想排序只查找10/ 部分,这样字母就不会破坏数字排序,如何在烧瓶中设置它-行政?
我现在的column_default_sort=('custom_id')
【问题讨论】:
标签: python flask flask-admin
您可以使用column_sortable_list 为列提供sort key,如下所示:
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,) 部分。
【讨论】:
通过阅读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之外的过滤。
【讨论】: