[英]How to filter the django queryset based on the hours?
串行器
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
您可以計算兩個時間戳之間的小時數為 4,因此:
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))
# …
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.