2016-12-15 61 views
0

我有一個django模型,它有一個日期字段和一個單獨的時間字段。我正在嘗試使用過濾器按日期/時間在最新記錄上查找小於當前記錄的日期時間的值。Django:結合日期和時間字段和篩選器

如何使用批註/聚合將日期和時間字段合併爲一個,然後對其進行過濾?

models.py 
class Note(models.model): 
    note_date = models.DateField(null=True) 
    note_time = models.TimeField(null=True) 
    note_value = models.PositiveIntegerField(null=True) 

def get_last(n): 
    """ 
     n: Note 
     return: Return the note_value of the most recent Note prior to given Note. 
    """ 
    latest = Note.objects.filter(
     note_date__lte=n.note_date 
    ).order_by(
     '-note_date', '-note_time' 
    ).first() 

    return latest.note_value if latest else return 0 

這將返回的任何註釋從上一個日期,但如果我有在同一天兩個音符,一個在下午3點,一個在下午1點,我送了下午3點筆記的功能,我想得到1pm票據的價值。有沒有辦法將兩個字段註釋爲一個比較,還是我必須執行原始SQL查詢?有沒有辦法將日期和時間組件轉換爲一個,類似於您可以如何使用Concat作爲字符串?

Note.objects.annotate(
    my_dt=Concat('note_date', 'note_time') 
).filter(
    my_dt__lt=Concat(models.F('note_date'), models.F('note_time') 
).first() 

回答

0

發現使用models.Q這裏的答案:filter combined date and time in django

Note.objects.filter(
    models.Q(note_date__lt=n.note_date) | models.Q(
     note_date=n.note_date, 
     note_time__lt=n.note_time 
    ) 
).first() 

我想我只是沒有被正確的條件進行搜索。