我正在研究一个Django项目,我必须创建一个查询,返回我当前活动的所有记录。查询必须介于(startdate,startdate + duration)
之间到目前为止,我收到了此查询,但我不知道如何查询startdate + duration< datetime.now()
查看:
def home(request):
active_tasks = Task.objects.all().filter(start_time__lte=datetime.now())
context = {'active_tasks' : active_tasks}
return render(request, "main/home.html", context)
任务模型:
class Task(models.Model):
start_time = models.DateTimeField(default=datetime.now())
duration = models.IntegerField(default=10)
答案 0 :(得分:1)
您的代码有几个缺陷。首先,我们不清楚duration
有哪些单位,天,月,年,分?
我假设您使用的是日期,但您无法查询,因为您需要将start_time + duration
转换为日期时间并将其视为每条记录的结束时间,这在单个查询中是不可能的。正如@solarissmoke所提到的,你应该存储end_time
。如果需要,您可以保留duration
字段,但也可以使用property method进行计算。
此外,您的字段定义start_time = models.DateTimeField(default=datetime.now())
将不起作用,因为默认时间仅在django启动时(加载模型时)计算一次。这是新django开发人员常犯的错误。你应该把它改成:
start_time = models.DateTimeField(default=datetime.now)
这种情况下,datetime.now
将被视为一个函数对象,并在每次创建新对象时调用,这就是您想要的。请注意,django具有内置标志:auto_now_add
。