Hacemos una verificación profunda cada tutoriales en nuestra página web con la meta de mostrarte siempre la información más veraz y certera.
Solución:
como lo menciona ypercube, su caso de uso no requiere una subconsulta.
pero de todos modos, dado que muchas personas ingresan a esta página para aprender cómo hacer una subconsulta, así es como se hace.
employee_query = Employee.objects.filter(company='Private').only('id').all()
Person.objects.value('name', 'age').filter(id__in=employee_query)
Fuente: http://mattrobenolt.com/the-django-orm-and-subqueries/
ids = Employee.objects.filter(company='Private').values_list('id', flat=True)
Person.objects.filter(id__in=ids).values('name', 'age')
Puede crear subconsultas en Django utilizando un conjunto de consultas no evaluado para filtrar su conjunto de consultas principal. En tu caso, sería algo como esto:
employee_query = Employee.objects.filter(company='Private')
people = Person.objects.filter(employee__in=employee_query)
Supongo que tienes una relación inversa de Person
a Employee
nombrada employee
. Me resultó útil mirar la consulta SQL generada por un conjunto de consultas cuando intentaba entender cómo funcionan los filtros.
print people.query
Como han dicho otros, realmente no necesita una subconsulta para su ejemplo. Podría unirse a la tabla de empleados:
people2 = Person.objects.filter(employee__company='Private')
Acuérdate de que tienes la capacidad de esclarecer tu experiencia si te fue de ayuda.