繁体   English   中英

Django Rest Framework - 按日期时间过滤

[英]Django Rest Framework - filters by datetime

我目前正在使用Django和django-rest-framework构建一个应用程序。

我的问题相对简单,但我在某些方面陷入困境。

基本上,我管理Collection和Collectible对象。 将Collectible对象分配给Collection。 两个对象都有一个字段“created_at”。

我想生成一个包含所有集合的视图,并为每个集合生成所有集合。 它很容易。

现在,我希望生成相同的结构,但使用过滤参数“createdfrom”从提供的日期获得新的集合和新的收藏品。

这是我使用django-filters的代码:

class CollectionFilter(django_filters.FilterSet):
    # /api/collections/?createdfrom=2013-11-20
    createdfrom = django_filters.DateTimeFilter(name="collectibles__created_at", lookup_type='gt')
    class Meta:
        model = Collection

这几乎很有效。 只有几个问题:

  • 它显示集合中的所有收藏品,其中至少有一个与过滤器匹配(基本上,它还显示过时的项目和新闻项目)

  • 它不显示在此日期之后创建的新集合。

谁能帮助我?

非常感谢

如果我正确理解您的问题,Collection和Collectible必须有一个日期>为过滤器提供的日期。 因此,我们将定义一个“动作”,该动作将与QuerySet和值一起提供。 这在包含Core Arguments(特别是actiondjango-filter文档中有所概述。

def action(queryset, value):
    return queryset.filter(
        collectibles__created_at__gt=value,
        created_at__gt=value,
    )

class CollectionFilter(django_filters.FilterSet):
    # /api/collections/?createdfrom=2013-11-20
    createdfrom = django_filters.DateTimeFilter(
        name="collectibles__created_at",
        action=action,
    )

    class Meta:
        model = Collection

我们创建了一个action函数定义,以QuerySet作为第一个参数调用,值(date)作为第二个参数。

action:可选的callable,告诉过滤器如何处理查询集。 它接收一个QuerySet和要过滤的值,并应返回一个适当过滤的Queryset。 - 来自文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM