django按日期查询数据

1、数据库模型 。

from django.db import models

class Get_time(models.Model):
    '''测试'''
    name = models.CharField(max_length=12)
    time= models.DateTimeField(auto_now_add=True)

2、序列化和分页。 

from rest_framework import serializers

from knife_manage import models

class Get_time_Serializer(serializers.ModelSerializer):
    '''序列化'''
    class Meta:
        model = models.Get_time
        fields = '__all__'

class PageNumber(PageNumberPagination):
    '''分页'''
    page_size = 50
    page_size_query_param = 'size'
    max_page_size = 5
    page_query_param = 'page'

3、路由。

    url(r'^/test/$', views.Timeview.as_view({'get':'filter','post':'post'})),

 4、视图。


class Timeview(ModelViewSet):
    authentication_classes = []   # 取消用户认证
    queryset = models.Get_time.objects.all()
    serializer_class = Get_time_Serializer  # 序列化数据
    pagination_class = PageNumber()  # 分


    def filter(self, request, *args, **kwargs):
        """多条件查询匹配"""
        queryset = models.Get_time.objects.filter(time__year = 2020) # 按年查询
        queryset = models.Get_time.objects.filter(time__month = 12)  # 按月查询
        queryset = models.Get_time.objects.filter(time__day= 9)  # 按日查询
        now = datetime.datetime.now()
        start = now-datetime.timedelta(hours=12, minutes=0, seconds=0)
        queryset = models.Get_time.objects.filter(time__gt= start) # 大于某个日期
        queryset = models.Get_time.objects.filter(time__lt= start) # 小于某个日期
        start_date = datetime.date(2009, 1, 1)
        end_date = datetime.date(2020, 3, 31)
        queryset = models.Get_time.objects.filter(time__range=(start_date, end_date)) # 按区间查询
        queryset = models.Get_time.objects.filter(time__week_day=4) # 按星期几查询
        pager_size = self.pagination_class.paginate_queryset(queryset=queryset, request=request, view=self)
        ser = self.serializer_class(instance=pager_size, many=True)
        return self.pagination_class.get_paginated_response(ser.data)

    def post(self, request, *args, **kwargs):
         """新增"""
        try:
            import random
            name=random.randint(10000,99999)
            return Response({'info': '操作成功!', 'code': 200})
        except Exception:
            return Response({'info': '操作失败!', 'code': 400})

5、结果:

6、extra。

1)、用户选择日历查询。

range=['2019-03-04', '2019-06-24']  # 前台传过来的数据
start=[int(x) for x in range[0].split('-')]
end=[int(x) for x in range[1].split('-')]
start_date = datetime.date(start[0], start[1],start[2])
end_date = datetime.date(end[0],end[1],end[2])

 2)、用户选择特定日期。

(2)、未设置时区时的操作
request_time='2012-09-09'
time_split=[int(x) for x in request_time.split('-')]
times='%s-%s-%s'%(time_split[0],time_split[1],time_split[2]+1)
cday = datetime.strptime(times, '%Y-%m-%d')
models.Get_time.objects.create(name=name,time=cday)


(2)、设置时区时的操作
配置文件设置时区:
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_TZ = False

视图:
request_time='2012-09-09'
cday = datetime.strptime(request_time, '%Y-%m-%d')
models.Get_time.objects.create(name=name,time=cday)

 

  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值