按两周时间段对模型进行分组并将其与数据条目绑定的最佳方法?

问题描述 投票:0回答:1

我正在开展一个为期两周的项目。我有一个带有

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
条目吗?每周是否应该按新网址进行分组?

老实说,我现在对按两周分组然后绑定到新的一周感到困惑。

python django django-models
1个回答
0
投票

尝试创建一个新模型

TwoWeekPeriod
来表示两周的时间段。

week_number 是根据开始日期计算的,新的

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)

回答评论里的问题

按照上述答案定义

TwoWeekPeriod
模型和
CreateNewTimesheet
模型后,获取第 1 周的
TwoWeekPeriod
对象,然后 与第 1 周
TwoWeekPeriod
相关的时间表

week_1_period = TwoWeekPeriod.objects.get(week_number=1)
timesheets_week_1 = CreateNewTimesheet.objects.filter(two_week_period=week_1_period )

so

timesheets_week_1
包含属于第 1 周的所有时间表

© www.soinside.com 2019 - 2024. All rights reserved.