哪个django字段应用于时间计数器?实际的

哪个django字段应用于时间计数器?实际的,django,django-models,Django,Django Models,我需要在模型中为所需的工作时间创建一个字段。例如,默认值为40小时。我应该使用哪个字段 UPD 当我使用: required_work_hours = models.DurationField(_('Required work hours'), blank=True, null=True, default=timedelta(hours=40)) 我得到的值是16:00:00,而不是40小时 附言 我已经有了

我需要在模型中为所需的工作时间创建一个字段。例如,默认值为40小时。我应该使用哪个字段

UPD

当我使用:

required_work_hours = models.DurationField(_('Required work hours'), blank=True, null=True,
                                           default=timedelta(hours=40))
我得到的值是16:00:00,而不是40小时

附言


我已经有了
开始时间
结束时间
。我应该有一个值与
end\u time-start\u time

进行比较,如果您计划存储整小时(而不是分、秒),则可以使用该值。像大多数Django
ModelField
s一样,您可以设置一个默认值(在您的例子中,我猜是40)

你也可以使用。它接受
datetime.timedelta
值。因此,它可以存储天、小时、秒

有关持续时间字段的用法,请参阅SO条目


我已经有了
开始时间
结束时间

在这种情况下:假设这两个字段的类型都是
DateTimeField
,那么
end\u time-start\u time
应该为您提供
datetime.timedelta
实例。然后可以将此
datetime.timedelta
实例转换为小时

代码如下所示:

delta = end_time - start_time
hours = (delta.days * 24) + (delta.seconds // 3600)

使用类似整数的日期,我觉得有些信息丢失了

我会用
工作\开始\时间
工作\结束\时间
来建模。您可以使用
DateTimeField
,设置默认值,并在查看这两个日期的模型上添加计算字段以计算小时数。一些需要考虑的问题。

您可以使用存储小整数。Django保证最小范围为:

类似于
PositiveIntegerField
,但只允许在某个(依赖于数据库的)点下使用值0到32767之间的值在Django支持的所有数据库中都是安全的

所以每周的小时数可以表示出来,因为每周有168小时。Furtmore Django将验证该数字是否为正数,这意味着如果您输入负数,它将在表单中引发错误

您还可以使用验证器对此进行补充,例如:

from django.core.validators import MaxValueValidator

class MyModel(models.Model):
    hours = models.PositiveIntegerField(
        validators=[MaxValueValidator(168, 'There are only 168 hours a week.')],
        default=40
    )
从django.core.validators导入MaxValueValidator
类MyModel(models.Model):
小时=models.PositiveIntegerField(
validators=[MaxValueValidator(168,“一周只有168小时”。)],
默认值=40
)
在这里,它将以整数形式存储小时数。这意味着您可以存储39、40或41,但不能存储例如40.5


对于一般持续时间,您可以使用。这将Python级别的值转换为
timedelta
对象,在数据库级别,它在PostgreSQL数据库上使用
interval
,在Oracle上使用
interval DAY(9)到SECOND(6)
,在其他数据库上,它将在后台使用
bigint
。然而,这样做的优点是,它将持续时间表示为
timedelta
,这使得对
datetime
对象进行运算变得非常方便。

分辨率是多少?一小时?一分钟?十分钟?@WillemVanOnsem 1小时里已经有了
开始时间
结束时间
。我应该有一个值来比较
结束时间-开始时间
您比较的工时值可以是您创建该员工时添加的值?即使在这种情况下,我也会小心,检查人们的工作时间是否会随着时间的推移而改变。此外,40小时作为一个标准正在慢慢改变。人们轮班工作,企业尝试每周工作4天。这不是你创造员工时能增加的价值。它必须是那个值。在乌克兰,以40小时为标准的情况不会很快改变:)