Итак, мы использовали DateTimeRangeField
в модели бронирования для обозначения начала и конца. Объяснение этому могло бы быть не очень хорошим - отдельные ретроспективные поля могли бы быть лучше в ретроспективе - но сейчас у нас на это больше года, и пути назад нет.
Обычно это нормально, за исключением того, что мне нужно аннотировать только дату и время окончания на запрос связанной модели. И я не могу понять синтаксис.
Вот небольшой игрушечный пример, в котором я хочу получить список сотрудников с аннотацией окончания их последнего бронирования.
class Booking(models.Model):
timeframe = DateTimeRangeField()
employee = models.ForeignKey('Employee')
sq = Booking.objects.filter(employee=OuterRef('pk')).values('timeframe')
Employee.objects.annotate(last_on_site=Subquery(sq, output_field=DateTimeField()))
Это не работает, потому что аннотированное значение является диапазоном, а не единственным значением. Я пробовал кучу модификаторов (например, __1 .1, но ничего не работает).
Есть ли способ получить только одно значение? Я думаю, вы могли бы смоделировать это без усложнения подзапроса, просто выполнив простой поиск значений. Booking.objects.values('timeframe__start')
(или что угодно). По сути, это то, что я пытаюсь сделать здесь.