Python 如何在两个模型日期字段之间设置时间差
我已经花了一些时间试图在我的模型的两个字段中设置一个时间差,然后显示它们之间的差值 我尝试过Stack和许多其他教程,但不太了解舒尔a是否应该在我的模型或视图上创建函数,或者在视图上创建基本变量我尝试过所有这些都是我的代码: MODELS.PYPython 如何在两个模型日期字段之间设置时间差,python,django,python-3.x,django-models,django-views,Python,Django,Python 3.x,Django Models,Django Views,我已经花了一些时间试图在我的模型的两个字段中设置一个时间差,然后显示它们之间的差值 我尝试过Stack和许多其他教程,但不太了解舒尔a是否应该在我的模型或视图上创建函数,或者在视图上创建基本变量我尝试过所有这些都是我的代码: MODELS.PY from django.db import models from datetime import datetime from datetime import timedelta class To_do (models.Model): tas
from django.db import models
from datetime import datetime
from datetime import timedelta
class To_do (models.Model):
task = models.CharField(max_length=150)
topic = models.CharField(max_length=150)
how = models.TextField(max_length=600)
start = models.DateField(blank=False)
end = models.DateField(blank=False)
def __str__(self):
return self.task
VIEWS.PY
class DetailView(DetailView):
template_name = 'details.html'
model = To_do
def get_queryset(self):
return To_do.objects.all()
def get_delta(self):
d1 = To_do.start
d2 = To_do.end
tdelta = d1-d2
return tdelta
我想显示星号和结束之间的差异,以及之后,如果少于三天,设置一个警报。
感谢您的帮助。您可以对查询集进行注释以计算差异,如:
from django.db.models import DurationField, ExpressionWrapper, F
class DetailView(DetailView):
template_name = 'details.html'
model = To_do
def get_queryset(self):
return To_do.objects.annotate(
delta=ExpressionWrapper(F('end') - F('start'), output_field=DurationField())
)
从django.db.models导入DurationField,ExpressionWrapper,F
类详细视图(详细视图):
模板名称='details.html'
型号=待办事项
def get_queryset(自我):
返回到_do.objects.annotate(
delta=ExpressionWrapper(F('end')-F('start'),output_field=DurationField())
)
由此查询集生成的对象将在此处有一个额外字段
delta
,它是一个timedelta
对象,包含结束和开始之间的差异。您可以对查询集进行注释以计算差异,如:
from django.db.models import DurationField, ExpressionWrapper, F
class DetailView(DetailView):
template_name = 'details.html'
model = To_do
def get_queryset(self):
return To_do.objects.annotate(
delta=ExpressionWrapper(F('end') - F('start'), output_field=DurationField())
)
从django.db.models导入DurationField,ExpressionWrapper,F
类详细视图(详细视图):
模板名称='details.html'
型号=待办事项
def get_queryset(自我):
返回到_do.objects.annotate(
delta=ExpressionWrapper(F('end')-F('start'),output_field=DurationField())
)
这个查询集产生的对象将在这里有一个额外的字段
delta
,这是一个timedelta
对象,它包含结束和开始之间的差异。woooooo谢谢你,先生,我已经尝试了很多次了。因此,每当我想通过两个模型字段之间的数学运算创建变量时,我都可以使用ExpressionWrapper。我正在阅读文档。@lucasrf27:ExpressionWrapper通常是不必要的,但这里给Django一个“提示”字段的类型。例如,如果这两个项目是整数,你可以用diff=F('int1')-F('int2')
对不起,先生,我还有另一个疑问,有什么建议可以让一天的日期减去结束日期,让它们得到我剩下的天数吗?呜呼,谢谢,先生,我一直在尝试这个方法。因此,每当我想通过两个模型字段之间的数学运算创建变量时,我都可以使用ExpressionWrapper。我正在阅读文档。@lucasrf27:ExpressionWrapper通常是不必要的,但这里给Django一个“提示”字段的类型。例如,如果这两个项目是整数,你可以用diff=F('int1')-F('int2')
来注释。对不起,先生,我还有另一个疑问,有什么建议可以让一天的日期从结束日期中减去,从而得到我剩下的天数?