【问题标题】:How to sort a part of a column text?如何对列文本的一部分进行排序?
【发布时间】:2019-05-23 06:58:22
【问题描述】:

我将column_default_sort 设置为custom_id,例如10/K/2019 我想排序只查找10/ 部分,这样字母就不会破坏数字排序,如何在烧瓶中设置它-行政? 我现在的column_default_sort=('custom_id')

【问题讨论】:

    标签: python flask flask-admin


    【解决方案1】:

    您可以使用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,) 部分。

    【讨论】:

      【解决方案2】:

      通过阅读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之外的过滤。

      【讨论】:

      • 可以做 OP 要求的,所以我认为说它不是具有误导性和无益的。答案也没有解释面对这个常见问题的人应该如何解决它。 “寻找方法”不是答案。 :-)
      猜你喜欢
      • 2021-09-01
      • 1970-01-01
      • 2016-06-01
      • 2014-11-05
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多