如何使用 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)