如何使用日期时间字段执行F()查询?

时间:2018-07-08 20:31:20

标签: python django

我想基于一个模型的两个字段进行查询,日期是一个以int偏移的日期,用作时间增量

model.objects.filter(last_date__gte=datetime.now()-timedelta(days=F('interval')))

我的模型是这样的:

class Line(models.Model):
    last_date = models.DateTimeField(auto_now=True)
    interval = models.IntegerField(default=0)

我正在使用 Django 2.0 db.sqlite3

我找到了一些来源What is the replacement for DateModifierNode in new versions of DjangoMaking queries using F() and timedelta at django,但它们没有帮助。

有人建议使用工期字段,但我希望拼命地以天为单位输入间隔,每当我使用工期字段时,管理员都需要以[days hh:mm:ss]的形式以管理员形式输入时间间隔。

有些人给出了一种方法

model.objects.filter(last_date__gte=datetime.now()-timedelta(days=1)*F('interval'))

在db.sqlite3中不起作用并返回错误。

请向我建议一些解决方案,例如使用工期字段并仅输入天数的管理员或某些具有天数整数字段的解决方案。

1 个答案:

答案 0 :(得分:0)

我这样处理情况:

class Line(models.Model):
  last_date = models.DateTimeField(auto_now=True)
  interval1 = models.IntegerField(default=0)
  interval2 = models.DurationField(default=0)

  def save(self, *args, **kwargs):
    self.interval2 = timedelta(days=self.interval1)
    super(Line, self).save(*args, **kwargs)

我使用了两个字段,并在将表单中的interval1(整数字段)转换为interval2(DurationField)并排除了表单中的interval2的同时,可以轻松应用Filter。

  model.objects.filter(last_date__gte=datetime.now()- F('interval2'))