2016-12-15 60 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() 

我想我只是没有被正确的条件进行搜索。