Лучший способ сгруппировать модели по двухнедельным периодам и привязать их к вводу данных?
Я работаю над проектом, который основан на двухнедельном периоде времени. У меня есть модель с 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)