Django:结合日期和时间字段和筛选器
问题描述:
我有一个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()
答
发现使用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()
我想我只是没有被正确的条件进行搜索。