Python 3.x python按日期筛选数组的最佳方法

Python 3.x python按日期筛选数组的最佳方法,python-3.x,list,django-models,Python 3.x,List,Django Models,我有一个Rest对象列表。这是django模型 class Rest(models.Model): product = models.ForeignKey('Product', models.DO_NOTHING) date = models.DateTimeField() rest = models.FloatField() 我想从中为今天的日期选择对象。我是这样做的。也许有更方便、更紧凑的方法 for rest in rests_list: if re

我有一个Rest对象列表。这是django模型

class Rest(models.Model):
   product = models.ForeignKey('Product', models.DO_NOTHING)
   date = models.DateTimeField()
   rest = models.FloatField()
我想从中为今天的日期选择对象。我是这样做的。也许有更方便、更紧凑的方法

    for rest in rests_list:
      if rest.date.day == datetime.now().day:
         result.append(rest)
First-datetime.now.day将为您提供当月的日期,例如,如果今天是2020年3月18日,则为18日,但您已经说过您想要今天的日期。以下假设您想要的是今天的日期,而不是当月的某一天

注意:weAreStarDust指出该字段是DateTimeField,而不是DateField,我遗漏了该字段,并更新了其答案

您现在这样做的方式似乎是从数据库获取所有REST,然后在应用程序代码中过滤它们,假设REST\u列表来自类似于est.objects.all`。通常,您希望对数据库查询本身进行尽可能多的过滤,而对客户机代码进行尽可能少的过滤

在这种情况下,您可能想做的是:

from datetime import date
Rest.objects.filter(date__date=date.today())
这将只带回日期为今天的记录,即您想要的记录

如果您已经以某种方式拥有了所有休息,并且您只想筛选到今天的休息,那么您可以使用:

filter(lambda x: x.date.date() == date.today(), rests_list)
这将返回一个筛选器对象,该对象仅包含REST_列表中日期==date.today的项。如果您希望将其作为列表而不是iterable,可以执行以下操作:

list(filter(lambda x: x.date.date() == date.today(), rests_list))
或者对于元组:

tuple(filter(lambda x: x.date.date() == date.today(), rests_list))
注: 如果您实际上只想存储一个日期,我建议您考虑使用DateField,但如果您想存储任何时区信息,则不考虑使用DateField。 如果您想存储一个DATETIME,我会考虑将字段从日期重命名为DATETIME,或StRADEDIAT AT -调用字段日期,但有一个DATETIME可能会有点混乱并导致错误。 对于datetime字段,将值强制转换为date。允许链接其他字段查找。获取日期值


您可以使用django过滤器进行过滤,并从模型中仅获取今天的日期数据。不需要先获取所有数据,然后应用循环来获取今天的日期数据。你必须像这样写你的查询

import datetime
Rest.objects.filter(date__date = datetime.date.today())
但要确保数据库服务器和web服务器的时区应该相同

import datetime
Rest.objects.filter(date__date = datetime.date.today())