Skip to main content
 首页 » 编程设计

python之基于自定义函数的Django过滤器

2025年01月19日22zhujiabin

我有一个表 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. 创建与您的模型具有一对一关系的额外列或表
  2. 覆盖模型的保存功能以处理您的日期,并在保存模型时将结果存储在第 1 步中创建的这个额外列中。
  3. 对第 1 步中创建的这个额外列执行查询。

这种方式有空间开销,但是会使得查询速度更快。

如果不会很多,但查询会使您的网络请求明显变慢,那么也可以使用上述方法。这将有助于提供流畅的网络体验。