[英]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(特别是action
)的django-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.