Доброго времени суток.
Есть задача при запросе в бд проверять актуальность объекта. Запрос выглядит вот так:
SELECT
r.id, r.created, r.modified,
(COUNT(upd.id)::integer)::boolean AS has_updates,
(r.created > (
STATEMENT_TIMESTAMP() - CONCAT(
COALESCE((SELECT s.value FROM system_settings s WHERE s.name = 'actuality_period'), '10'),
' days'
)::interval)
)::boolean AS is_actual
FROM records_record r
LEFT OUTER JOIN record_recordupdate upd ON (r.id = upd.record_id)
WHERE r.source = 'GAO'
GROUP BY r.id
ORDER BY r.modified DESC;
На Django пробовал что-то типа вот этого:
period = IntervalDays(Coalesce(
Subquery(Settings.objects.filter(name='actuality_period').values('value')),
Value('10'))
)
Record.objects\
.annotate(has_updates=Cast(Cast(Count('record_updates'), IntegerField()), BooleanField()))\
.annotate(is_actual=Cast(F('created') > Now() - period, BooleanFields()))
но операторы '>', '<' и т.п. не работают здесь.
Можно ли каким-либо образом преобразовать данный запрос чтобы его можно было описать при помощи Django ORM?