Document.objects.filter(site_ref=site_obj).exclude(documentstatus_set__in=DocumentStatus.objects.filter(status_id=4))
Не совсем один запрос, но я не думаю, что это выполнимо без перехода на raw sql. Полагаю, два запроса неплохие.
Я должен отметить, что вышеизложенное предполагает, что обратное отношение между Document и DocumentStatus равно documentstatus_set
. Вы можете явно указать, как выглядит обратное отношение:
# inside the DocumentStatus model definition
document = models.ForeignKey(Document, related_name='document_statuses')
Тогда запрос становится:
Document.objects.filter(site_ref=site_obj).exclude(document_statuses__in=DocumentStatus.objects.filter(status_id=4))