如何使用 django ORM 将 __contains 应用于格式化日期?
How to apply __contains to formatted date with django ORM?
我想实现数据库搜索,我需要按包含搜索请求的日期过滤查询集。问题是用户会看到格式化的日期(如 dd.mm.yyyy)并期望搜索以相同的方式看到它,但默认 __contains
考虑 yyyy-mm-dd 格式的日期。如何在使用 __contains
之前将过滤器应用于 DateField?我需要一种使用 django orm 的方法,否则它会太长(不使用 sql)。
我尝试将 DATE_FORMAT = 'd.m.Y'
设置为令人满意的格式,但它没有效果(即使设置 USE_L10N = False
)
也考虑过创建自定义查找,但不确定如何实现它
我需要将 __contains
应用到所有模型字段,所以我不能只重新格式化搜索值
您可以将日期属性注释为 CharField
并对注释属性执行过滤器。
from django.db.models import Func, F, Value, CharField
queryset.annotate(string_date=Func(
F('YOUR_DATE_FIELD'),
Value('YOUR OUTPUT FORMAT'),
output_field=CharField(),
function='to_char')
).filter(string_date__contains=INPUT_DATE)
我想实现数据库搜索,我需要按包含搜索请求的日期过滤查询集。问题是用户会看到格式化的日期(如 dd.mm.yyyy)并期望搜索以相同的方式看到它,但默认 __contains
考虑 yyyy-mm-dd 格式的日期。如何在使用 __contains
之前将过滤器应用于 DateField?我需要一种使用 django orm 的方法,否则它会太长(不使用 sql)。
我尝试将 DATE_FORMAT = 'd.m.Y'
设置为令人满意的格式,但它没有效果(即使设置 USE_L10N = False
)
也考虑过创建自定义查找,但不确定如何实现它
我需要将 __contains
应用到所有模型字段,所以我不能只重新格式化搜索值
您可以将日期属性注释为 CharField
并对注释属性执行过滤器。
from django.db.models import Func, F, Value, CharField
queryset.annotate(string_date=Func(
F('YOUR_DATE_FIELD'),
Value('YOUR OUTPUT FORMAT'),
output_field=CharField(),
function='to_char')
).filter(string_date__contains=INPUT_DATE)