计算时间

from django.utils import timezone
from dateutil import relativedelta
class DeviceOfPowerSerializer(serializers.ModelSerializer):
    """
    用于能源设备列表的serializer
    """
    electric_num_for_now = serializers.SerializerMethodField(read_only=True, help_text='当前电量')
    electric_num_for_day = serializers.SerializerMethodField(read_only=True, help_text='当天用电量')
    # electric_num_for_week = serializers.SerializerMethodField(read_only=True, help_text='本周用电量')
    electric_num_for_month = serializers.SerializerMethodField(read_only=True, help_text='本月用电量')

    def get_electric_num_for_now(self, obj):
        result = ElectricNum.objects.filter(device=obj)
        if result:
            result = result.last()
            return result.num
        return 0

    def get_electric_num_for_day(self, obj):
        now = timezone.now()
        yesterday = now - timezone.timedelta(days=1)

        result_today = ElectricNum.objects.filter(device=obj, create_time__date=now.date())
        result_yesterday = ElectricNum.objects.filter(device=obj, create_time__date=yesterday.date())

        today_num = result_today.last().num if result_today else 0
        yesterday_num = result_yesterday.last().num if result_yesterday else 0

        return today_num - yesterday_num

    def get_electric_num_for_month(self, obj):
        now_time = timezone.now()
        pass_time = now_time - relativedelta.relativedelta(months=-1)

        result_now = ElectricNum.objects.filter(device=obj,
                                                create_time__year=now_time.year,
                                                create_time__month=now_time.month)
        result_pass = ElectricNum.objects.filter(device=obj,
                                                 create_time__year=pass_time.year,
                                                 create_time__month=pass_time.month)

        now_num = result_now.last().num if result_now else 0
        pass_num = result_pass.last().num if result_pass else 0

        return pass_num - now_num

    class Meta:
        model = Device
        fields = ('id', 'name', 'electric_num_for_now', 'electric_num_for_day', 'electric_num_for_month', 'create_time')

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值