如何使用库 Django-RQL 来过滤 Django Rest Framework 中 'Time' 类型的字段?



我想在我的领域‘hora’中的REST API中使用过滤器,但您的类型是Time。当我尝试进行查询时,例如:127.0.0.1:8000/api/v1/queimadas/?hora=17:15:33,则错误显示:";RQL分析错误">

我的任务是在不同的时间过滤这个字段"hora",比如:?ge(hora,17:00:00(&le(hora,20:00:00(在url中(遵循文档(,但我不能:(

非常感谢大家。

这是文档库django-rql-https://django-rql.readthedocs.io/en/latest/index.html

我的序列化程序.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
},
},
)

我建议您使用django_filter。它很容易使用。

这可能有助于

from rest_framework import filters
class UserListView(generics.ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = [filters.SearchFilter]
search_fields = ['username', 'email']

安装django-filter并在settings.py文件中声明它,这样就很容易实现

最新更新