猿问

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

我想基于一个模型的两个字段进行查询,一个日期,被一个int偏移,用作timedelta


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


我发现一些消息来源是什么在Django的新版本更换为DateModifierNode并进行查询使用F()和timedelta在Django的,但他们是没有帮助的。


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


有些提供了一种方法


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

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


请给我建议一些解决方案,例如使用持续时间字段并仅输入天数的管理员,或者使用天数的整数字段的解决方案。


萧十郎
浏览 193回答 1
1回答

收到一只叮咚

我以这种方式处理了这种情况: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'))
随时随地看视频慕课网APP

相关分类

Python
我要回答