我有一个表AvailableDates,其中包含存储日期信息的日期列。 我想在对日期执行一些由 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])
我怎样才能实现这个目标?非常感谢任何其他方法。
我无法将类型信息存储在单独的列中,因为根据用户给出的input_variable,一个日期可以是不同的类型。
最佳答案
您所采取的方法将导致非常耗时的查询,因为您正在循环遍历所有对象,因此会跳过所有对象 数据库系统在查询方面提供的时间优势。
您必须回答的主要问题是“此查询的使用频率如何?”
如果会很多,那么我会建议采用以下方法。
- 创建与模型具有一对一关系的额外列或表格
- 覆盖模型的保存函数来处理您的日期,并将结果存储在保存模型时在第 1 步中创建的额外列中。
- 对第 1 步中创建的这个额外列执行查询。
这种方法有空间开销,但会使查询速度更快。
如果不会很多,但查询可能会使您的网络请求明显变慢,那么也可以使用上述方法。它将有助于提供流畅的网络体验。
关于python - 基于自定义函数的Django过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48353488/