Django, подзапрос exists всегда возвращает False
Я столкнулся с проблемой, что мой подзапрос возвращает False, хотя должен возвращать True.
from wagtail.models import WorkflowState, Page, Workflow
import pytest
def test_filter_pages(user):
page = PageFactory.create(
owner=user,
live=False,
latest_revision_created_at=timezone.now(),
)
WorkflowState.objects.create(
content_type=ContentType.objects.get_for_model(Article),
base_content_type=ContentType.objects.get_for_model(Page),
object_id=str(page.pk),
workflow=Workflow.objects.get(name="Moderators approval"),
status=WorkflowState.STATUS_IN_PROGRESS,
requested_by=user,
)
workflow_states = WorkflowState.objects.filter(
status=WorkflowState.STATUS_IN_PROGRESS, object_id=str(OuterRef("pk"))
)
queryset = (
Page.objects.select_related("owner", "latest_revision")
.annotate(workflow_state_status=Exists(workflow_states))
.filter(owner=user)
)
lists_ids = [
page.id
for page in queryset
if page.workflow_state_status
]
assert lists_ids != 0
В этом тесте есть только одна страница, которая должна иметь состояние рабочего процесса. Но тест проваливается при list_ids = 0. Что здесь не так?
Более того, когда я пытаюсь заменить workflow_state_status
на простой
WorkflowState.objects.filter(
object_id=self.pk,
status=WorkflowState.STATUS_IN_PROGRESS,
).exists()
все работает корректно (кроме запросов к базе данных)