首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以将`__date`用于“`DjangoFilterBackend`”的`filterset_fields`列表中的“时间戳”字段

是否可以将`__date`用于“`DjangoFilterBackend`”的`filterset_fields`列表中的“时间戳”字段
EN

Stack Overflow用户
提问于 2021-05-17 07:59:54
回答 1查看 39关注 0票数 1

我使用ListAPIView列出数据库表中的记录,该表在models.py中表示为ExpiredOrders(models.Model)

Django模型有几个列以及created_atmodified_at作为时间戳

我想根据查询参数created_at过滤created_at上的记录。

我正在尝试使用DjangoFilterBackend来实现同样的目标。

代码语言:javascript
运行
复制
filter_backends = [DjangoFilterBackend]
filterset_fields = ['craeted_at__date']

但是,它给了我一个错误-

代码语言:javascript
运行
复制
'Meta.fields' must not contain non-model field names: created_at__date

由于created_date是一个时间戳,而在查询参数中,我只将数据作为YYYY-MM-DD获取,所以我使用__date使数据库表的记录与查询参数具有可比性。

实现这个目标的另一个方法是-

代码语言:javascript
运行
复制
def get_queryset(self):

        try:

            queryset = ExpiredOrders.objects.filter(created_at__date=self.query_params['created_at'])

        except:

            queryset = ExpiredOrders.objects.all()
        
        return queryset

我想知道是否有可能通过在list filterset_fields中定义文件名来完成任务。

另外,请解释一下这个__是什么意思。

据我所知,表示类变量或方法是一种惯例,不能与其他类或子类的对象一起使用。也许,这个概念在Python中被称为name mangling

在Django文档中,我看到了许多这样的--。其中一些是-

gte -大于或等于的

lte -小于或等于

et -等于

EN

Stack Overflow用户

回答已采纳

发布于 2021-05-17 13:53:37

使用FilterSet类创建带有自定义筛选器的筛选器。

代码语言:javascript
运行
复制
class ExpiredOrderFilter(filters.FilterSet):
    created_at__date = filters.DateFilter(field_name='created_at__date')

    class Meta:
        model = ExpiredOrder
        fields = ['created_at',]

现在而不是filterset_fields用户filterset_class

代码语言:javascript
运行
复制
filter_backends = [DjangoFilterBackend]
filterset_class = ExpiredOrderFilter
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67565942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档