[pyar] Django: subquery complicada

Mariano Bianchi marianobianchi08 en gmail.com
Mar Mayo 7 14:12:49 -03 2019


Quizás no entendí bien los modelos, pero creo que yo haría algo así:

####
eleccion_gobernador = Eleccion.objects.get(nombre='gobernador')
eleccion_intendente = Eleccion.objects.get(nombre='intendente')

id_mesas_con_votos_a_gobernador =
set(VotoMesaReportado.objects.filter(eleccion=eleccion_gobernador).values_list('mesa',
flat=True))
id_mesas_con_votos_a_intendente =
set(VotoMesaReportado.objects.filter(eleccion=eleccion_intentente).values_list('mesa',
flat=True))

id_mesas_con_votos_a_ambos =
id_mesas_con_votos_a_gobernador.intersection(id_mesas_con_votos_a_intendente)

mesas_sin_alguna_eleccion_iniciada =
Mesa.objects.exclude(id__in=id_mesas_con_votos_a_ambos)
####


Posiblemente haya cosas más performantes pero creo que la idea se entiende.
Ojalá te sirva!


El lun., 6 may. 2019 a las 9:45, Martín Gaitán (<gaitan en gmail.com>)
escribió:

> Gente, tengo una query mas o menos compleja que no logro hacer andar.
> Les muestro los modelos simplificados
>
> class Mesa(models.Model):
>     eleccion = models.ManyToManyField('Eleccion')
>
> class Eleccion(models.Model):
>     nombre = models.CharField(max_length=50)
>     opciones = models.ManyToManyField('Opcion')
>
>
> class Opcion(models.Model):
>     nombre = models.CharField(max_length=50)
>
>
> class VotoMesaReportado(models.Model):
>     mesa = models.ForeignKey(Mesa)
>     eleccion = models.ForeignKey(Eleccion)
>     opcion = models.ForeignKey(Opcion)
>     votos = models.PositiveIntegerField()
>
>     class Meta:
>         unique_together = ('mesa', 'eleccion', 'opcion')
>
> Necesito obtener las mesas que tengan "elecciones sin reportar", es decir,
> aquellas que no tengan instancias de VotoMesaReportado asociadas para una
> o mas de sus elecciones relacionadas. Por ejemplo, si una mesa asociada a
> la eleccion Gobernador y a Intendendente, ya tiene VotoMesaReportado (para
> una o mas opciones) en Gobernador, pero ninguna en Intendente, entonces
> debe estar incluida. Si ademas hay otra elección pero no tiene que ver con
> la mesa, no debe afectar.
>
> Tengo un PR abierto con un test fallando y mi intento de resolverlo con
> una subquery anotada, pero por algun motivo que no desculo me funciona mal.
>
> https://github.com/OpenDataCordoba/escrutinio-social/pull/17
>
> Es el sistema de escrutinio paralelo que se usará el domingo que viene en
> la elección de Córdoba, y tiene el objetivo de validar el escrutinio
> oficial. Ayuda bienvenida
>
> https://genfm.com.ar/2019/04/ongs-y-partidos-politicos-proponen-mayor-transparencia-electoral/
>
> Desde ya gracias.
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20190507/d73ac39a/attachment.html>


Más información sobre la lista de distribución pyar