Лучший способ сгруппировать модели по двухнедельным периодам и привязать их к вводу данных?

Я работаю над проектом, который основан на двухнедельном периоде времени. У меня есть модель с start_date и end_date, как показано ниже:

class CreateNewTimesheet(models.Model):
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
    start_date = models.DateField(_("Start Date"))
    end_date = models.DateField(_("End Date"))
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

Я хочу иметь возможность добавить еще одну строку или что-то, что группирует start_date и end_date.


Dates: 03/06/2024 - 03/16/2024

And group or tie that to "week 1".

Цель состоит в том, чтобы создать временную таблицу на основе двухнедельного периода времени. Мне нужно иметь возможность группировать временные листы по двухнедельному периоду и привязывать их к этой конкретной группе. Все временные листы должны быть сохранены.

После ввода start_date и end_date мне нужно, чтобы они были привязаны к первой неделе. Я думал добавить еще одну строку в модель CreateNew, а затем привязать ее к первой неделе. А затем для каждого start_date и end_date вводится новая "неделя", а для каждого нового start_date и end_date создается новая. Должно ли это основываться на вводе created_at? Должна ли каждая неделя группироваться по новому url?

Честно говоря, я застрял на этом моменте относительно группировки по двум неделям и последующей привязки к новой неделе.

попробуйте создать новую модель TwoWeekPeriod для представления двухнедельных периодов.

число_недели вычисляется на основе начальной даты, а новая TwoWeekPeriod создается или извлекается на основе начальной и конечной дат.

from django.db import models
from django.utils import timezone

class TwoWeekPeriod(models.Model):
    start_date = models.DateField(_("Start Date"))
    end_date = models.DateField(_("End Date"))
    week_number = models.IntegerField(_("Week Number"))

class CreateNewTimesheet(models.Model):
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
    start_date = models.DateField(_("Start Date"))
    end_date = models.DateField(_("End Date"))
    two_week_period = models.ForeignKey(TwoWeekPeriod, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        week_number = (self.start_date - timezone.now().date()).days // 14 + 1
        two_week_period, _ = TwoWeekPeriod.objects.get_or_create(
            start_date=self.start_date,
            end_date=self.end_date,
            defaults={'week_number': week_number}
        )
        self.two_week_period = two_week_period
        super().save(*args, **kwargs)
Вернуться на верх