哪个django字段应用于时间计数器?实际的
我需要在模型中为所需的工作时间创建一个字段。例如,默认值为40小时。我应该使用哪个字段 UPD 当我使用:哪个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小时 附言 我已经有了
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
进行比较,如果您计划存储整小时(而不是分、秒),则可以使用该值。像大多数DjangoModelField
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小时为标准的情况不会很快改变:)