我使用ListAPIView
列出数据库表中的记录,该表在models.py
中表示为ExpiredOrders(models.Model)
。
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
我想知道是否有可能通过在list filterset_fields
中定义文件名来完成任务。
另外,请解释一下这个__
是什么意思。
据我所知,表示类变量或方法是一种惯例,不能与其他类或子类的对象一起使用。也许,这个概念在Python中被称为name mangling
。
在Django文档中,我看到了许多这样的--
。其中一些是-
gte
-大于或等于的
lte
-小于或等于
et
-等于
发布于 2021-05-17 13:53:37
使用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
https://stackoverflow.com/questions/67565942
复制相似问题