Django-filter: IsoDateTimeFilter 问题比较“精确”以外的问题

创建于 2017-09-14  ·  3评论  ·  资料来源: carltongibson/django-filter

我一直在尝试实现这里描述的过滤: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')

最有用的评论

您可以使用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},
        }

所有3条评论

嗯。 我的第一个回应是接受它作为字典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您想在文档中注意这个限制吗? 如果您认为合适,我很乐意为此提出拉取请求。

此页面是否有帮助?
0 / 5 - 0 等级