我想在我的领域‘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文件中声明它,这样就很容易实现