python - 是否可以在“DjangoFilterBackend”的“filterset_fields”列表中使用“__date”作为“timestamp”字段
问题描述
我ListAPIView
用来列出我的数据库表中的记录,该表表示ExpiredOrders(models.Model)
为models.py
.
Django 模型有几个列created_at
以及时间戳。modified_at
我想根据created_at
查询参数过滤记录created_at
。
我正在尝试使用DjangoFilterBackend
来实现相同的目标。
filter_backends = [DjangoFilterBackend]
filterset_fields = ['craeted_at__date']
但是,它返回给我一个错误-
'Meta.fields' must not contain non-model field names: created_at__date
作为时间戳created_date
,在查询参数中我只会得到日期,我用来使数据库表的记录与查询参数具有可比性。YYYY-MM-DD
__date
实现这一目标的另一种方法是 -
def get_queryset(self):
try:
queryset = ExpiredOrders.objects.filter(created_at__date=self.query_params['created_at'])
except:
queryset = ExpiredOrders.objects.all()
return queryset
我想知道是否可以通过在列表中定义文件名filterset_fields
来完成它。
另外,请解释一下这是什么__
意思。
据我所知,表示类变量或方法是一种约定,不能与其他类或子类的对象一起使用。name mangling
也许,这个概念在 Python 中是众所周知的。
在 Django 文档中,我看到了很多这样的--
. 其中一些是 -
gte
-大于或等于
lte
-小于或等于
et
-等于
解决方案
使用FilterSet
类来创建带有自定义过滤器的过滤器。
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
filter_backends = [DjangoFilterBackend]
filterset_class = ExpiredOrderFilter
推荐阅读
- go - 如何在控制器中导入模型
- python - Opencv DNN 在 YoloV3 上设置不同的输入
- android - SQLiteException:没有这样的表:历史(代码 1 SQLITE_ERROR):,编译时:插入历史(完成日期)值(?)
- javascript - in 运算符如何与 JavaScript 中的集合一起使用?
- typescript - 允许集合字符串值的类型是否被视为干净代码?
- java - 从具有 1:N 关系的字段中设置百里香叶的值。我应该怎么办?
- flutter - 使用相同的列表序列将项目从列表保存到 Firestore
- asp.net - 如何将字节数组转换为 httpPostedFile?ASP.NET
- image - 寻找程序搜索照片包含离线其他图片
- azure - Visual Studio 2019 - 身份验证 - 云资源管理器 - 重新输入凭据