【问题标题】:How to filter the django queryset based on the hours?如何根据小时过滤 django 查询集?
【发布时间】:2022-07-19 20:07:35
【问题描述】:

序列化器

class MyModelSerializer(serailizers.ModelSerializer):
        hour = serializers.SerializerMethodField()

        def get_hour(self, obj):
           created_at = obj.created_at # datetime
           now = datetime.now()
           return (now - datetime).total_seconds() // 3600
         
        class Meta:
           model = MyModel
           fields = "__all__"

API

在api中会有一个过滤参数hr。如果它提供了例如 4,那么我应该只返回具有 4 小时的匹配条目(在上面的序列化程序中计算)。

我该怎么做?

    @api_view(["GET"])
    def get_list(request):
        qs = MyModel.objects.all()
        hr = request.GET.get("hr")
        if hr:
            qs = qs.filter(created_at__hour=hr) # get_hour value = hr this should be the comparison
        return MyModelSerializer(qs, many=True).data 

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您可以计算两个时间戳之间的小时数是四个,所以:

    from datetime import timedelta
    from django.utils.timezone import now
    
    hr = request.GET.get('hr')
    nw = now()
    if hr:
        hr = int(hr)
        frm = nw - timedelta(hours=hr+1)
        to = nw - timedelta(hours=hr)
        qs = qs.filter(created_at__range=(frm, to))
    # …

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 2019-10-08
      • 2019-07-12
      相关资源
      最近更新 更多