按日期(或其他模型参数)过滤列表结果

 大姑娘苍之瑜 发布于 2023-02-07 18:27

我有一个模特:

class Call(models.Model):
    created_on = models.DateTimeField(auto_now_add=True)
    send_on = models.DateTimeField(default=datetime.now)
    ...
    survey = models.ForeignKey(Survey, null=True, blank=True)

和相应的ModelSerializer:

class CallSerializer(serializers.HyperlinkedModelSerializer):
    url = serializers.HyperlinkedIdentityField(
        view_name='call-detail',
    )
    recipient = PhoneNumberField(read_only=False)
    status = SurveySerializer(source='survey', read_only=True)

    class Meta:
        model = Call
        fields = ('url', 'id', 'send_on', ...)
        lookup_field= 'pk'

并查看:

class CallList(generics.ListCreateAPIView):
    serializer_class = CallSerializer
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrSuperuser,)

    def pre_save(self, obj):
        ...

    def get_queryset(self):
        """
        This view should return a list of all the calls
        for the currently authenticated user.
        """
        ...

我希望能够支持API列表请求,让调用者Call按日期范围过滤send_on.我不确定如何以RESTful方式执行此操作以及DRF将以何种方式执行此操作,但是类似这样的事情:

mydomain.com/call/?start=2013-11-25T12:50:17&end=2013-11-28T12:50:17

并且返回将列出send_on给定日期之间的所有呼叫.使用DRF实现此目的的正确方法是什么?

1 个回答
  • 我认为这里的DRF文档清楚地解释了这一点.

    所以在你的情况下,它看起来像:

    from dateutil.parser import parse
    
    class CallList(generics.ListCreateAPIView):
        # ...
    
        def get_queryset(self):
            filter = {}
            queryset = Call.objects.all()
    
            start_date = self.request.QUERY_PARAMS.get('start_date', None)
            end_date = self.request.QUERY_PARAMS.get('end_date', None)
    
            if start_date is not None:
                filter['send_on__gte'] = parse(start_date)
    
            if end_date is not None:
                filter['send_on__lte'] = parse(end_date)
    
            queryset = queryset.filter(**filter)
    
            return queryset
    

    我使用python-dateutil轻松解析iso格式化的日期时间.

    2023-02-07 18:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有