Python 比较日期的年和月字段是否大于
我将执行以下查询:Python 比较日期的年和月字段是否大于,python,django,Python,Django,我将执行以下查询: today = datetime.date.today() year=today.year month=today.month news=News.objects.filter(date__year__lt = year,date__month__lt=month) 注意:新闻对象有一个名为date 但我得到了这个错误: Join on field 'date' not permitted. Did you misspell 'year' for the lookup ty
today = datetime.date.today()
year=today.year
month=today.month
news=News.objects.filter(date__year__lt = year,date__month__lt=month)
注意:新闻对象有一个名为date
但我得到了这个错误:
Join on field 'date' not permitted. Did you misspell 'year' for the lookup type?
你的想法是什么
提前感谢Django在处理关系(例如,
date\uuuuuu year\uuuuu*
)时在某些查找方面遇到问题。我认为这是他们正在为未来版本所做的工作
这会产生一个可接受的结果吗
news = News.objects.filter(date__lt = datetime.date(year, month, 1))
您不能将
\u lt
附加到\u年
或\u月
上。只有最后一个双下划线位考虑了限定符,然后才把它看作遍历,即Django将尝试在名为<代码>日期>代码>的连接表中查找一个名为“代码>年份<代码>的字段,这显然是不正确的。
对于这种情况,您需要直接比较日期:
date = datetime.date(year, month, 1)
news = News.objects.filter(date__lt=date)
谢谢,伙计,日期字段有日期和时间,我只想比较一下日期,你建议的方法是正确的,如果消除了时间,我怎么做?你可以将它与
日期字段
或日期字段
一起使用。如果是DateTimeField
比较的时间将隐含在午夜。你的意思是我不能在对其进行此类查询时节省时间和日期?我不确定我是否理解。你想要的只是早于特定月份和年份的新闻。为此,您只需将其与Pythondate
进行比较。您还可以使用datetime.datetime(年、月、1、0、0、0)
,但这是不必要的。这两种方法实际上都不会影响查询返回的内容。您的日期时间字段
仍然是日期时间
,即使您将其与查询中的日期
进行比较。@Asma:它怎么不正确?同样,当您将日期时间
与日期
进行比较时,日期
基本上被转换为日期时间
,时间为“00:00:00”,也就是午夜或凌晨12:00,即当天的开始时间。它将返回任何“少于”该日期的内容,这将是前一天或更早的内容,因为现在是午夜。好提示,您的答案是正确的,请查看我的顶部评论。