2017-03-03 63 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'))