2017-03-03 80 views
0

我定义了两个Django的查找功能Django的查找功能的bug,以年和周提取日期

@models.DateTimeField.register_lookup 
class ExtractYear(Extract): 
    lookup_name = 'year' 

@models.DateTimeField.register_lookup  
class ExtractWeek(Extract): 
    lookup_name = 'week' 

我叫它像这样:

propositions = propositions.annotate(week=ExtractWeek('posting_date'), year=ExtractYear('posting_date')) 

它提供了2017年,周刊: 52的日期01/01/2017

我有+5小时试图找出问题的来源,谁可以调查此?

+0

后您正在使用的数据库和SQL结果('STR(propositions.query)')。 – Anonymous

回答

1

ISO年份编号与一年左右的“常规”年编号不同。日期2017-01-01位于ISO 2016年的ISO第52周。有关详细信息,请参阅维基百科有关ISO week date的文章。

由于year提取日历年,您将得到意外结果2017年第52周,但week返回ISO周。

你还没有说过你正在使用哪个数据库。在postgres中,您可以使用isoyear获取日期的ISO年份。

@models.DateTimeField.register_lookup 
class ExtractISOYear(Extract): 
    lookup_name = 'isoyear' 

下面的查询将返回iso_year 2016年第52周:

propositions = propositions.annotate(week=ExtractWeek('posting_date'), iso_year=ExtractISOYear('posting_date')) 
相关问题