Conjuntos de consultas Django 1.11: Obtiene todos los objetos (instancias de modelo) de un conjunto de relaciones

J. Hesters

Si tiene un modelo para empresas. Estas empresas tienen un atributo employment_set, porque los trabajadores se asignan a las empresas a través de la relación laboral. ¿Cómo puedo consultar a todos los empleados de una empresa determinada? El modelo para los empleos se ve así:

class Employment(
    SoftDeletableModel,
    TimeStampedModel,
    models.Model
):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    employee = models.ForeignKey(UserWorkerProfile)
    employed_by = models.ForeignKey(UserOwnerProfile)

Intenté usar company.employment_set.values("employee"), pero esto devuelve un extraño conjunto de consultas de activador. ¿Hay alguna forma de devolver el conjunto de consultas normal? ¿O values()ya es el método correcto?

Editar: Para eloborar un poco más: quiero terminar con un conjunto de consultas que contenga todas las instancias del modelo UserWorkerprofile.

En la documentación values()dice:

Devuelve un QuerySet que devuelve diccionarios, en lugar de instancias de modelo, cuando se usa como iterable.

y quiero exactamente un conjunto de consultas de instancias de modelo.

Willem Van Onsem

Según su comentario, desea que todos UserWorkerProfile los correos electrónicos que tengan una (puede haber cero, una o más) Employmentinstancias relacionadas una Employmentinstancia que tenga como Company(todas Employmenttienen exactamente una company), una empresa determinada.

Podemos consultar dichos correos UserWorkingProfileelectrónicos con la siguiente consulta:

UserWorkingProfile.objects.filter(employment__company=some_comany)

Por lo tanto, este conjunto de consultas devolverá todos los mensajes de correo electrónico UserWorkingProfilepara los que existe una Employmentinstancia que se vincula a la empresa dada some_companyy eso UserWorkingProfile.

En Django uno usa dos guiones bajos consecutivos para mirar "a través" de una relación (esto se puede usar de forma bidireccional , tenga en cuenta que dos guiones bajos consecutivos se usan para otras cosas además de mirar a través de relaciones).

Por lo tanto, escribimos una consulta que se parece más o menos a:

SELECT `userworkingprofile`.*
FROM `userworkingprofile`
JOIN `employment` ON `employment`.`employee_id` = `userworkingprofile`.`id`
WHERE `employment`.`company_id` = 123

Con 123en realidad el pkde some_company.

Tenga en cuenta que es posible que ocurra lo mismo varias veces en este conjunto de consultas, si el empleado ha trabajado varias veces para .UserWorkingProfilesome_company

Si desea que todos UserWorkingProfileocurran como máximo una vez , debe agregar .distinct():

UserWorkingProfile.objects.filter(employment__company=some_comany).distinct()

Aunque Django de hecho define un administrador de objetos nombrado employment_seten una Companyinstancia, hasta donde yo sé, no se pueden "combinar" dos administradores de este tipo (por some_company.employment_set.employeelo que no funcionará).

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Cómo ver todos los conjuntos de consultas posibles de un modelo en django

Django: cambia el valor de un campo para todos los objetos en un conjunto de consultas

Django: cómo obtener todos los objetos relacionados en el modelo de relación de un usuario con un solo conjunto de consultas

Django: cómo obtener todos los objetos relacionados en el modelo de relación de un usuario con un solo conjunto de consultas

Django obtiene objetos relacionados manteniendo el orden de los padres en un conjunto de consultas y obteniendo el siguiente objeto

Django: conjunto de consultas para obtener todos los detalles relacionados con un modelo

Django: obtiene todos los objetos de un usuario específico

¿Cómo puedo actualizar el valor de campo de todos los objetos en un conjunto de consultas en Django?

Recuperar todos los objetos relacionados de objetos en un conjunto de consultas

Recoge todos los objetos de un conjunto de conjuntos con Java Stream

Django obtiene un conjunto de consultas y filtra por su propio elemento de conjunto de consultas

¿Cómo recorrer un conjunto de consultas para crear una instancia de todos los conjuntos de formularios?

Obtener la suma de todos los campos en un conjunto de consultas de Django

Cómo cambiar un campo de todos los objetos en un conjunto de consultas de django a un valor pero no quiero guardarlo

Django obtiene todos los nombres de claves foráneas de un modelo

Django obtiene todos los objetos que contienen un pk de una relación de muchos a muchos

Cómo combinar dos valores de objetos de modelo de django en un solo conjunto de consultas

Django annotate: obtiene el atributo de todos los objetos relacionados

Conjunto de consultas para modelos de relaciones FK en django

Conjuntos de consultas de Django: objetos que incluyen el conjunto completo en ManyToMany

La consulta sql de Oracle 11g obtiene todos los números de un conjunto de rangos

¿Cómo contar todos los objetos en un conjunto de consultas relacionados con un valor de campo específico?

¿Obtiene objetos que no están en muchas relaciones de un modelo diferente?

Cuente los objetos en el conjunto de consultas por valor en un campo. Django

laravel obtiene todos los modelos con relaciones y las relaciones de estas relaciones

Sume todos los valores en un conjunto de consultas en Django

Django obtiene todos los objetos cuyo archivo de muchos a muchos contiene un filtro

cómo obtener la suma de todos los objetos por conjunto de consultas (objeto por objeto)

Modelo de conjunto de consultas de filtro de Django

TOP Lista

CalienteEtiquetas

Archivo