Django在startdate和duration之间进行查询

时间:2016-06-14 12:58:59

标签: python django sqlite

我正在研究一个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)

1 个答案:

答案 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

检查this SO answer on more detailed explanation.