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

标签 python django django-models django-queryset django-filters

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

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

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

关于python - 基于自定义函数的Django过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48353488/

相关文章:

python - Django 和 VirtualEnv 开发/部署最佳实践

Django 的 makemessages 创建了很多模糊条目

python - 调用 python 对象时超出最大递归深度

python - 限制字符串中的句子数量

php - Python/Django 中是否有相当于 PHP 的 hash_hmac?

python - 如何对模型中的 2 个 DecimalFields 求和并显示在管理 View 中?

python - 当 User 模型更新 Django 时,如何更新我的 UserProfile 模型

Django makemigrations AttributeError : 'str' object has no attribute '_meta'

python - 来自字符串列表的子数组

python - Twisted 和 smtp tls 客户端