У меня есть две модели django, которые определяют:
Item = Набор предметов с датой истечения срока действия.
Событие = набор событий с начальной и конечной датой.
Моя цель заключается в том, чтобы при отображении элемента дата его истечения отображалась в условно отформатированном виде в зависимости от того, истекает ли срок действия этого элемента после даты окончания следующего события, но до даты окончания следующих событий (поэтому следует предупреждать об истечении срока действия этого события).
Проблема становится, как лучше всего управлять этим подвигом?
Если бы у меня был прямой доступ к базе данных, я бы использовал подзапросы, чтобы получить минимальную конечную дату еще в будущем, а затем сравнивал бы ее с датой истечения срока действия для замены форматирования.
Из исследований я прихожу к выводу, что это лучше всего обрабатывать в логике представления, а не пытаться установить метод в любой из моделей, но я не знаю, как лучше всего скомбинировать это. поэтому я могу вернуть значение моей минимальной будущей даты и моего объекта itemlist из модели Item.
На данном этапе текущее представление довольно простое (позже у него будет больше возможностей фильтрации):
def itemlist(request):
item_list = Item.objects.all
return render(request, "itemlist.html", {'item_list': item_list})
но я не вижу способа легко вернуть эквивалент django чего-то похожего на то, что я бы сделал в прямом SQL:
select item from items where status != expired and expiry_date <= (select min(end_date) from events where end_date >= getdate() )
РЕДАКТИРОВАТЬ: Поскольку я написал это, я понял, что сравнение того, что я хочу, немного сложнее, так как это не минимальная дата, а следующая за минимальной.
Для позиции A, expiry_date 01/05/19
Событие A: дата окончания 25/04/19
Событие B: дата окончания 10/05/19
Что мне нужно сделать, это проверить события при чтении списка элементов, увидеть, что дата истечения срока действия элемента A - после следующего события.end_date для события A, но до события event.end_date для события B, поэтому установите признак использования условного форматирования при отображении даты истечения срока действия шаблона.
В конце концов, я полагаю, что список желаний должен также быть в состоянии сказать для каждого элемента «какое последнее событие, я могу обновить этот элемент до его истечения, если в списке есть событие после истечения срока его действия».