gpt4 book ai didi

python - Django Rest Framework - 按日期时间过滤

转载 作者:行者123 更新时间:2023-11-28 19:23:03 27 4
gpt4 key购买 nike

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

我的问题相对简单,但我在某个时候卡住了。

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

我想生成一个包含所有收藏品的 View ,并且每个收藏品都是收藏品。它很容易工作。

现在,我希望生成完全相同的结构,但使用过滤参数“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

这几乎可以正常工作。只有几个问题:

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

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

谁能帮帮我?

非常感谢

最佳答案

如果我对您的问题的理解正确,则收藏品和收藏品的日期必须 > 为过滤器提供的日期。因此,我们将定义一个“操作”,一旦提供 QuerySet 和值就会执行。 django-filter documentation covering Core Arguments (specifically action) 中对此进行了概述。 .

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 作为第一个参数,将值(日期)作为第二个参数来调用。

action: An optional callable that tells the filter how to handle the queryset. It recieves a QuerySet and the value to filter on and should return a Queryset that is filtered appropriately. -From Documentation

关于python - Django Rest Framework - 按日期时间过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091637/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com