Рассмотрим следующую модель. Я хотел бы отфильтровать объекты по последней метке времени, которая может быть либо created_at
, либо updated_at
. По какой-то причине функция filter
не распознает аннотированное поле, и мне трудно найти соответствующие примеры кода для выполнения этой простой вещи.
Сообщение об ошибке: «Не удается преобразовать ключевое слово timestamp в поле».
Как вы будете получать объекты примера в течение 7 дней, основываясь на более новой дате.
from datetime import timedelta
from django.db import models
from django.db.models.functions import Greatest
from django.utils import timezone
class Example(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(null=True)
@property
def recently_updated(self):
return Event.objects
.annotate(timestamp=Greatest('created_at', 'updated_at'))
.filter(timestamp__gte=timezone.now() - timedelta(days=7))
.order_by('-timestamp')
Джанго 1,11