【问题标题】:How to use library Django-RQL to filter fields of type 'Time' in Django Rest Framework?如何使用库 Django-RQL 在 Django Rest Framework 中过滤“时间”类型的字段?
【发布时间】: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


    【解决方案1】:

    我推荐你使用django_filters。它非常易于使用。

    【讨论】:

      【解决方案2】:

      这可能会有所帮助

      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 文件中声明它非常容易

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-03
        • 2018-08-07
        • 1970-01-01
        • 2016-09-08
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        • 2020-04-27
        相关资源
        最近更新 更多