Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

311
Vistas
Anotar en un Django Queryset distinto ya no usa el queryset distinto

Tengo una consulta y estoy tratando de anotar el recuento de cada valor para el campo tail_tip . Mis filtros de consulta originales en una tabla relacionada, por lo que es necesario usar distintos (). No estoy exactamente seguro de cómo describirlo, pero aparece cuando anoto la consulta distinta, la consulta ya no es distinta. Aquí están mis consultas con las que estoy jugando en mi caparazón.

 // Without distinct() Ski.objects.filter(published=True, size__size__in=[178, 179, 180, 181, 182, 183, 184]).count() // 318 skis = Ski.objects.filter(published=True, size__size__in=[178, 179, 180, 181, 182, 183, 184]).distinct() skis.count() // 297 skis.values('tail_tip').order_by('tail_tip').annotate(count=Count('tail_tip')) // <QuerySet [{'tail_tip': 'flat', 'count': 99}, {'tail_tip': 'full_twin', 'count': 44}, {'tail_tip': 'partial_twin', 'count': 175}]> // total count = 318

Dado que skis ya es distinct() , no sé por qué cuando lo anoto, el recuento total es igual a la consulta no distinta.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Suponiendo que la tabla relacionada llamada Size and Ski tiene uno a muchos. Esto podría hacerse de esta manera:

 ski_filtered = Ski.objects.filter( published=True, id__in=Size.objects.values("skis__id").filter( # Maybe somethig else than `skis` here, you didn't show its model, so I couldn't know size__in=[178, 179, 180, 181, 182, 183, 184] ) ) skis.values('tail_tip').distinct().order_by('tail_tip').annotate(count=Count('tail_tip'))

Por qué: DISTINCT no se pudo usar con annotate() . La implementación de annotate() en django se realiza con su propia cláusula GROUP BY . Por lo tanto, la aplicación de distinct() en la consulta ya GROUP BY -ed simplemente no podría funcionar.

over 4 years ago · Santiago Trujillo Denunciar

0

Intente agregar distinct=True :

 skis.values('tail_tip').order_by('tail_tip').annotate(count=Count('tail_tip', distinct=True))
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda