我有一个表 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 ,一个日期可以是不同的类型。
答案 0 :(得分:1)
您正在采用的方法将导致非常耗时的查询,因为您循环遍历所有对象,因此跳过所有 数据库系统在查询方面给出的时间效益。
您必须回答的主要问题是"此查询的使用频率是多少?"
如果它会变得很多,那么我会建议采用以下方法。
这种方法有空间开销,但它会使查询更快。
如果它不会很多,但查询可能会使您的网络请求明显变慢,那么也使用上述方法。它将有助于顺畅的网络体验。
答案 1 :(得分:0)
一个解决方案是先获取ID列表:
dates_, wanted_ids = AvailableDates.objects.all(), []
for i in range(0, len(types)):
wanted_ids += [d for d in dates_ if convert_date_to_type(d.date) == types[i]]
wanted_dates = AvailableDates.objects.filter(id__in=wanted_ids)
性能不是很好但是有效