为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

萧十郎 2021-04-16 10:15:32
我想基于一个模型的两个字段进行查询,一个日期,被一个int偏移,用作timedeltamodel.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我发现一些消息来源是什么在Django的新版本更换为DateModifierNode并进行查询使用F()和timedelta在Django的,但他们是没有帮助的。有些人建议使用工期字段,但是我希望拼命地以天为单位输入间隔,每当我使用工期字段时,管理员都需要以[days hh:mm:ss]的形式在管理员表格中输入间隔。有些提供了一种方法model.objects.filter(last_date__gte=datetime.now()-timedelta(days=1)*F('interval'))在db.sqlite3中不起作用并返回错误。请给我建议一些解决方案,例如使用持续时间字段并仅输入天数的管理员,或者使用天数的整数字段的解决方案。
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

我以这种方式处理了这种情况:


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'))


查看完整回答
反对 回复 2021-04-27
  • 1 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信