Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在两个模型日期字段之间设置时间差_Python_Django_Python 3.x_Django Models_Django Views - Fatal编程技术网

Python 如何在两个模型日期字段之间设置时间差

Python 如何在两个模型日期字段之间设置时间差,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

我已经花了一些时间试图在我的模型的两个字段中设置一个时间差,然后显示它们之间的差值

我尝试过Stack和许多其他教程,但不太了解舒尔a是否应该在我的模型或视图上创建函数,或者在视图上创建基本变量我尝试过所有这些都是我的代码:

MODELS.PY

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')
来注释。对不起,先生,我还有另一个疑问,有什么建议可以让一天的日期从结束日期中减去,从而得到我剩下的天数?