如何从DateTimeField显示django中剩余的日期和时间?

时间:2019-09-20 08:44:26

标签: django django-views python-datetime

这里我有一个简单的功能,用于发送请假请求并由管理员接受。此代码目前适用,但是我想在此处添加一些功能。例如,如果用户输入day = 2,即{{1} }然后将其存储到数据库中,然后在IntegerField下面的功能接受休假之后,我要显示休假的剩余天数def accept_leave(request,pk):在完成两天后,它应该显示一些消息,就像您休假了一样完成。

我不知道要开始这个问题。我该怎么办?任何帮助都会很棒。

我的方法有什么错误吗?

编辑:现在,我删除了day(整数字段),并将start_day和end_day添加为DateTimeField。现在如何显示接受休假后的休假剩余天数和时间?

models.py

(Example:1 day 12 hours and 30 sec. remaining to complete leave ).

views.py

class Leave(models.Model):
    staff = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,related_name='staff_leave')
    organization = models.ForeignKey(Organization,on_delete=models.CASCADE,related_name='staff_leave')
    sub = models.CharField(max_length=300)
    msg = models.TextField()
    start_day = models.DateTimeField()
    end_day = models.DateTimeField()
    #day = models.IntegerField(default=0)
    is_accepted = models.BooleanField(default=False)
    is_rejected = models.BooleanField(default=False)
    sent_on = models.DateTimeField(auto_now_add=True)

1 个答案:

答案 0 :(得分:2)

对于您的请假请求,为什么不存储以下内容: 开始日期和结束日期

(理想情况下)该想法是仅存储您无法计算的内容。

然后,您可以制作一个python property来计算start_date和end_date之间的天数(对于属性,“ fget”就足够了)。 python属性不会存储在数据库中,但这没什么大不了的,因为您可以计算它!因此您不必存储它。

days = property(fget=_get_days, doc="type: Integer")

这意味着每当访问对象“ Leave”的“ days”属性时,都会调用函数“ _get_days”来检索所需的内容。

如果self代表一个Leave对象,而您进行了print(self.days),它将最终打印出_get_days的结果。

“ doc”部分仅在此处,指示您的属性返回一个Integer。这不是强制性的,而是一种很好的做法,目的是不要忘记它。

然后,您必须编写该方法“ _get_days”(它必须位于属性定义上方,否则Python将不知道什么是“ _get_days”

def _get_days(self):
    return self.end_date - self.start_date

(something like that, that you convert into an int somehow)

此外,对于您的其他功能,您必须知道用户可以拥有多少剩余时间。只需将其存储在用户,用户团队或任何您想要的东西上即可。 然后,要检查用户是否还有剩余的休假,只需浏览带有所有接受的休假的查询集并使用上述属性即可。 然后,将结果减去用户可以休假的总数。

相关问题