在Flask管理中按星期几过滤

2024-10-01 19:16:26 发布

您现在位置:Python中文网/ 问答频道 /正文

数据库模型是

class DoctorWaitTimes(db.Model):
    __tablename__ = 'doctorwaittimes'

    id = db.Column(db.Integer, primary_key=True)
    datetime = db.Column(db.DateTime)
    waittime = db.Column(db.Integer)

然后在ModelView类中

^{pr2}$

这允许用户选择

  • 等于
  • 不等于
  • 大于
  • 小于
  • 双方
  • 不在两者之间
  • 空的

为了便于输入日期/时间,还显示了一个可单击的日历。这是完美的,但有两个改变我想做。在

我想删除以下选项:

  • 不等于
  • 大于
  • 小于
  • 不在两者之间
  • 空的

但我在文件里找不到任何东西。第二,我希望能够按星期几进行过滤。例如,它只会在每周二显示一次。在

column_filters = [
        FilterTerminal(
            DoctorWaitTimes.datetime, 'Day of Week', 
            options=(('1', 'Monday'), ('2', 'Tuesday'))
        ), 'datetime'
    ]

但是,我不确定如何使实际的过滤器工作。在MySQL中可以运行

SELECT * FROM doctorwaittimes WHERE AND DAYOFWEEK(datetime) = 1; 

选择星期一,但我不确定如何使用DB模型。在


Tags: key模型id数据库truedbdatetimemodel
1条回答
网友
1楼 · 发布于 2024-10-01 19:16:26

要从视图中删除几种类型的筛选器,请使用FilterConverter类。它有几个适用于每种类型列的过滤器列表。子类化它并替换这些列表以删除不需要的筛选器。将新类指定为视图的filter_converter属性:

from flask_admin.contrib.sqla import ModelView, filters

class DoctorFilterConverter(filters.FilterConverter):
    datetime_filters = (
        filters.DateTimeEqualFilter,
        filters.DateTimeBetweenFilter
    )

class DoctorView(ModelView):
    filter_converter = DoctorFilterConverter()
    column_filters = ['datetime']

您可以使用相同的方法添加新过滤器。星期几筛选器可以通过以下方式实现:

^{pr2}$

然后可以将其添加到datetime_filters

class DoctorFilterConverter(filters.FilterConverter):
    datetime_filters = (
        filters.DateTimeEqualFilter,
        filters.DateTimeBetweenFilter,
        DayOfWeekFilter
    )

请注意,没有通用的SQL函数来提取星期几。我使用了PostgreSQLEXTRACT函数。在MySQL中,可以尝试使用WEEKDAY函数:

def apply(self, query, value, alias=None):
    return query.filter(db.func.weekday(self.get_column(alias)) == value)

当WEEKDAY函数返回0表示星期一,返回6表示星期日时,您需要更改选项的计数。在

相关问题 更多 >

    热门问题