Контекст
У меня есть модели ContentBuild
& ContentBuildDeviceGroupLink
вот так:
# models.py
class ContentBuild(models.Model):
content_build_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
class ContentBuildDeviceGroupLink(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
content_build_uuid = models.ForeignKey(ContentBuild, on_delete=models.CASCADE, related_name='content_build_deploy')
group_uuid = models.ForeignKey(DeviceGroup, on_delete=models.CASCADE)
preload_date = UnixDateTimeField()
release_date = UnixDateTimeField()
Цель
Я хочу вернуть самый последний ContentBuildDeviceGroupLink
объект с release_date
в прошлом, вместе со всеми ContentBuildDeviceGroupLink
объектами с release_date
в будущем.
Что я пробовал
Я пытался использовать Q object
так:
in_future = Q(release_date__gte=timezone.now())
recent_past = Q(release_date__lt=timezone.now()).order_by('-release_date')[0]
ContentBuildDeviceGroupLink.objects
.filter(in_future & recent_past)
Это не работает и выдает ошибку:
'datetime.datetime' object has no attribute 'order_by'
Как мне отфильтровать объект с release_date
в самом последнем прошлом И все объекты с release_date
в будущем?
EDIT
Я изменил свой подход, чтобы сначала получить объект с самым последним прошлым, а затем отфильтровать все объекты, которые больше или равны этой дате. Тем не менее, приведенный ниже набор запросов работает нормально, когда существует только 1 ContentBuild
, но возвращает все более старые объекты, когда существует более 1 связанных ContentBuild
.
recent_past = ContentBuildDeviceGroupLink.objects
.filter(release_date__lte=timezone.now()).order_by('release_date').first()
ContentBuildDeviceGroupLink.objects.filter(release_date__gt=recent_past.release_date)