【发布时间】:2021-02-04 00:37:51
【问题描述】:
我想在我的字段“hora”的 REST API 中使用过滤器,但您的类型是时间。当我尝试查询时,例如:127.0.0.1:8000/api/v1/queimadas/?hora=17:15:33,错误显示:“RQL Parsing error。”
我的任务是过滤这个字段 'hora' 的时间,像这样: ?ge(hora,17:00:00)&le(hora,20:00:00) in url (按照文档),但是我不能:(
非常感谢大家。
这是文档库 django-rql - https://django-rql.readthedocs.io/en/latest/index.html
我的 serializers.py:
class QueimadaSerializer(serializers.ModelSerializer):
satelite = SateliteSerializer(many=False,read_only=True)
cidade = CidadeSerializer(many=False,read_only=True)
class Meta:
model = Queimada
fields = [
'id',
'latitude' ,
'longitude',
'data',
'hora' ,
'observacao',
'veracidade',
'visitado',
'satelite',
'cidade'
]
我的意见.py:
class QueimadasViewSet(viewsets.ModelViewSet):
queryset = Queimada.objects.all()
serializer_class = QueimadaSerializer
filter_backends = (RQLFilterBackend,)
rql_filter_class = QueimadaFilters
@action(detail=True,methods=['get'])
def satelite(self,request,pk=None):
satelite = Satelite.objects.filter(queimada__id=pk)
self.pagination_class.page_size = 10
page = self.paginate_queryset(satelite)
if page is not None:
serializer = SateliteSerializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = SateliteSerializer(satelite, many=True)
return Response(serializer.data)
我的过滤器.py:
class QueimadaFilters(RQLFilterClass):
MODEL = Queimada
SELECT = True
FILTERS = (
{
'namespace' : 'cidade',
'filters':('id','nome'),
'qs' : SelectRelated('cidade'),
},
{
'filter': 'data',
},
{
'filter': 'hora',
'custom': True,
'lookups': {
FilterLookups.EQ,
FilterLookups.IN,
FilterLookups.I_LIKE,
FilterLookups.LE,
FilterLookups.LT,
FilterLookups.GE,
FilterLookups.GT
},
},
)
【问题讨论】:
标签: python-3.x django django-rest-framework filtering