我有一个表 AvailableDates,其中有一列 date 用于存储日期信息。 我想在对日期执行一些操作后过滤日期,该操作由 convert_date_to_type 函数定义,该函数采用用户提供的参数 input_variable。
def convert_date_to_type(date,input_variable):
#perform some operation on date based on input_variable
#return value will be a type, which will be any one item from types list below
return type
类型列表:
types = []
types.append('type1')
types.append('type2')
types.append('type3')
现在我想根据类型过滤表格。我将在 for 循环中执行此操作:
for i in range(0,len(types)):
#filter table here based on types[i], something like this
AvailableDates.objects.filter(convert_date_to_type(date,input_variable)=types[i])
我怎样才能做到这一点?非常感谢任何其他方法。
我无法将type 信息存储在单独的列中,因为一个日期可以根据用户提供的input_variable 具有不同的类型。
请您参考如下方法:
您采用的方法将导致非常耗时的查询,因为您遍历所有对象并因此跳过所有 数据库系统在查询方面提供的时间优势。
您必须回答的主要问题是“该查询的使用频率是多少?”
如果会很多,那么我会建议采用以下方法。
- 创建与您的模型具有一对一关系的额外列或表
- 覆盖模型的保存功能以处理您的日期,并在保存模型时将结果存储在第 1 步中创建的这个额外列中。
- 对第 1 步中创建的这个额外列执行查询。
这种方式有空间开销,但是会使得查询速度更快。
如果不会很多,但查询会使您的网络请求明显变慢,那么也可以使用上述方法。这将有助于提供流畅的网络体验。
