我在模型中有一个字段:
class Sample(models.Model):
start = models.TimeField(verbose_name=_("start time"))
end = models.TimeField(verbose_name=_("end time"))
现在,需要通过“开始”和“结束”属性过滤我的对象,例如,它应该在30分钟内按今天,时间和时间过滤所有对象。
我试过了:
models.Sample.objects.filter(start__gt=datetime.now(),
end__lt=datetime.now() + timedelta(minutes=30))
我知道,使用两个过滤器进行过滤是一个错误..而且我的代码今天没有过滤。例如,我需要在(星期二)12点到12点30分之间拥有所有对象
提前感谢您的帮助。
答案 0 :(得分:3)
您在模型声明中使用过的TimeField。它只存储没有日,月或年数据的时间。
一个时间,由Python表示的datetime.time实例
因此,不要使用datetime.now()
使用datetime.now().time()
代替datetime.now() + timedelta(minutes=30)
使用(datetime.now() + timedelta(minutes=30)).time()
为了能够按天,月,年和时间进行过滤,请使用DateTimeField替换模型中的TimeField。使用datetime.now()
和timedelta(minutes=30)
进行过滤将与原始问题一样。