2016-06-22 23 views
1

我有一個簡單的方法。條目是員工輸入時間的時間表應用程序中的條目。Python/Django日期查詢:DateField的不支持的查找'日期'或不允許加入的字段

class Entry(m.Model): 
    """ Represents an entry in a time_sheet. An entry is either for work, sick leave or holiday. """ 
    # type choices 
    WORK  = 'w' 
    SICK  = 's' 
    VACATION = 'v' 
    type_choices = (
     (WORK,  'work'), 
     (SICK,  'sick leave'), 
     (VACATION, 'vacation'), 
    ) 
    # meta 
    cr_date = m.DateTimeField(auto_now_add=True, editable=False, verbose_name='Date of Creation') # date of creation 
    owner = m.ForeignKey(User, editable=False, on_delete=m.PROTECT) 
    # content 
    type = m.CharField(max_length=1, choices=type_choices, default='w') 
    day  = m.DateField(default=now) 
    start = m.TimeField(blank=True) # starting time 
    end  = m.TimeField(blank=True) # ending time 
    recess = m.IntegerField() # recess time in minutes 
    project = m.ForeignKey(Project, on_delete=m.PROTECT) 

    @classmethod 
    def get_entries_for_day(cls, user, day): 
     """ Retrieves any entries for the supplied day. """ 
     return Entry.objects.filter(day__date=day, owner=user).order_by('start') 

然而,當我嘗試運行我的項目就是這樣,它終止與下面的錯誤代碼:

「不支持查找‘日期’爲的DateField或加入上允許的領域不 。 「

我不太明白這條消息。指定的字段是沒有其他限制的日期字段。任何提示將不勝感激。

+0

你想用'day__date = day'完成什麼?雙下劃線語法旨在表示父子關係,即「日」字段具有名爲「日期」的子字段。 –

+0

看到我下面的評論,我在django文檔中發現它作爲檢查查詢日期的一種方法。 – user2660930

回答

4

在DateField上沒有這樣的事情作爲__date查找;該字段已經是日期。

目前尚不清楚您試圖將此字段與此字段進行比較。你傳遞給該方法的那一天是一個整數還是一個日期?如果這也是一個日期,那麼你應該直接比較它們。

+0

我在Django文檔中找到__date。我正在運行Django 1.9,它是一個新功能:https://docs.djangoproject.com/en/1.9/ref/models/querysets/#date這是他們提供的示例: Entry.objects.filter(pub_date__date = datetime.date(2005,1,1)) 我傳遞給該方法的局部變量是這樣的: day \t datetime.date(2016,6,1) – user2660930

+0

所以我一直在搞亂它。直接比較: return Entry.objects.filter(day = day,owner = user) 當我嘗試過之前,我沒有從數據庫中得到任何結果。所以我想,也許它沒有帶來任何結果,因爲我試圖以錯誤的方式比較對象,或者將不同的對象相互比較,並且沒有得到任何結果。然而,問題依然存在:查詢參數'__date'有什麼好處?也許這是在日期沒有以日期格式存儲時使用的? – user2660930

+5

在DateTimeField上使用'__date',而不是DateField,僅在日期部分匹配。 –