Django

Django Vuejs 日付の計算(Total:10day35.0h)

Python 日付の計算ライブラリ

Pythonで1か月後の日付は?とか日付の計算ってシステムを作るときにはよくでてくると思う。
そんな時に役立つライブラリがやっぱあるもんだ。

https://dateutil.readthedocs.io/en/stable/

pip install python-dateutil

これをインストールするだけで簡単に翌月や、1年度など計算することができるようになります!

いやーPythonは、今、AIでとても流行っている言語なので、これからもさまざまなライブラリが出てきてどんどん便利になっていくだろうなぁ

from dateutil.relativedelta import *

next_month = start_date + relativedelta(months=1)

年月トラン作成PG作成

年月トランをつくると、日にち曜日トラン、社員年月トラン、スケジュールトランと一気にたくさんのデータを作成していきます。
なんと、2人日ぐらいでできたらいいなぁって思って頑張ってる!

Yearmonth.create.py作成

from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.generics import ListAPIView, CreateAPIView, RetrieveUpdateAPIView, RetrieveUpdateDestroyAPIView, UpdateAPIView
from django.views import View
from ...models import *       
from django.views import View
from ...models import *
from datetime import datetime, date, timedelta
from dateutil.relativedelta import relativedelta
from .utils import *
from ..dayweek.create import *
from users.views.users import *
from ..schedule.create import *
from ..useryearmonth.create import *

class YearMonthAPI(APIView):
    """
    年月API
    """       
   
    def post(self, request, *args, **kwargs):
        '''
        次月の作成し保存する
        '''
        yearmonth = YearMonthUtils.create(request) #年月トラン作成
        yearmonth, start_date, end_date, days = yearmonth, yearmonth.start_date, yearmonth.end_date, yearmonth.days
        DayWeekCreate.create(request, yearmonth, start_date, end_date, days) #日にち曜日トラン作成
        user_list = UsersServiece.get_effect_users(request, start_date, end_date)#期間中の有効な社員を取得する
        user_year_month = UserYearMonthCreate.create(request, yearmonth, user_list)
        ScheduleCreate.create(request, user_list, yearmonth, user_year_month)

年月トラン作成後に日にち曜日トランを作成し、続けて社員年月トランを作成する…

ながれるような美しい連携…

自分で自画自賛しながら進めることでモチベーション維持を図っている。

DayWeekCreateを作成

これは、完全にフロントエンドで表示を楽にするためのテーブル。今後、週表示する機能を考える可能性があるので、その時には、第何週目かのフィールドを持つ可能性があるかなぁ。
今のところは、未確定なのでフィールドは用意してなーい

from django.views import View
from ...models import *
from datetime import datetime, date, timedelta

class DayWeekCreate:
    """
    日にち曜日トラン
    """
       
    def create(self, yearmonth, start_date, end_date, days):
        yearmonth, start_date, end_date, days = yearmonth, start_date, end_date, days
        dayweeks = []
        date = start_date
        for i in range(days):
            date = start_date + timedelta(days=i)
            new_obj = DayWeek(
                yearmonth = yearmonth,
                date = date,
                day = int(date.day),
                day_week = date.weekday(),
            )
            dayweeks.append(new_obj)
        DayWeek.objects.bulk_create(dayweeks)

UserYearMonth.Createを作成

社員年月トランは、スケジュールトランを作成した後、労働時間を更新しにいくというちょっとややこしいテーブルです。

from ...models import *


class UserYearMonthCreate:
    """
    社員年月トラン作成
    """
    def create(self, yearmonth, user_list):
        user_year_month = []
        for user in user_list:
            new_obj = UserYearMonth(
                year_month = yearmonth,
                user = user,
                min_work_time = user.min_work_time,
            )
            user_year_month.append(new_obj)
        UserYearMonth.objects.bulk_create(user_year_month)
        return user_year_month

ポイント

Viewを作ってるときに気づいて修正することがあるなぁ

完璧を目指しながら、でも作業しながら軌道修正できる柔軟性が必要

って、実際作っていくときに必要だとおもった

あとは、作っている機能の意味が理解できているかは、根柢なので、そこを理解しないまま作ろうとするのは、無責任なこと

-Django

© 2022 ごろう@縁紡ぐ