我一直在尝试实现这里描述的过滤:http: //django-filter.readthedocs.io/en/develop/ref/filters.html#isodatetimefilter
虽然该方法有效,但我想要的不仅仅是“精确”匹配,所以我替换了:
fields = ['published']
和:
fields = {'published': ['exact', 'gte', 'lte']}
这仍然适用于使用 IsoDateTime 的“精确”过滤,但对于“gte”和“lte”,使用 IsoDateTime 时它会失败。 它在使用 DateTime 时有效。
我目前正在使用一种解决方法,它通过单独指定每个查找来与 IsoDateTime 一起工作:
published = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='exact')
published_gte = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='gte')
published_lte = django_filters.IsoDateTimeFilter(
name='published', lookup_expr='lte')
嗯。 我的第一个回应是接受它作为字典fields
语法的限制。 明确声明字段——你的“解决方法”——是规范的方法。 字典语法只是一个捷径,它有限制是没有问题的。
话虽如此,我会用一个小的足迹来“修复”这个......
您可以使用Meta.filter_overrides
更改用于模型字段的过滤器类。
class BookFilter(django_filters.FilterSet):
class Meta:
model = Book
fields = {'published': ['exact', 'lte', 'gte']}
filter_overrides = {
models.DateTimeField: {'filter_class': django_filters.IsoDateTimeFilter},
}
@carltongibson我很高兴接受这个限制。 我试图寻找一个快速的“修复”,但目前我对代码内部工作的理解太有限了:/
@rpkilby谢谢,你的建议很有效,我会继续使用它:)
@carltongibson您想在文档中注意这个限制吗? 如果您认为合适,我很乐意为此提出拉取请求。
最有用的评论
您可以使用
Meta.filter_overrides
更改用于模型字段的过滤器类。