简体   繁体   中英

Django 1.9.1 prefetch_related with only hit multiple times to the database

I had the next query (self.model is 'Activos'):

queryset = self.model.objects.all() \
            .only('id', 'is_active', 'nombre', 'vehiculo_seguro', 'tipo_activo', 'placa', 'tipo_vehiculo_id',
                  'documentos_json', 'varios_json', 'cliente_id__nombre', 'icono_id') \
            .prefetch_related(Prefetch('equipo_activo', queryset=Equipos.objects.only('id', 'identificador_celular', 'identificador_satelital'), to_attr='equipos')) \
            .select_related('tipo_vehiculo_id', 'cliente_id', 'icono_id') \
            .order_by('cliente_id__nombre', 'nombre')

The models:

class Activos(Auditoria):

    nombre = models.CharField(max_length=50, db_index=True)
    placa = models.CharField(max_length=50, null=True, blank=True, unique=True)
    tipo_vehiculo_id = models.ForeignKey('Referencias.TipoVehiculo', db_column="tipo_vehiculo_id", db_index=True, on_delete=models.SET_NULL, null=True, blank=True, related_name="activo_tipo_vehiculo")
    cliente_id = models.ForeignKey('Clientes.Clientes', db_column="cliente_id", db_index=True, related_name="cliente_activo")
    foto = models.ImageField(max_length=200, null=True, blank=True, upload_to='uploads/activos/foto')
    icono_id = models.ForeignKey('Referencias.Iconos', db_column="icono_id", db_index=True, related_name="cliente_icono", on_delete=models.SET(get_icono))
vehiculo_seguro = models.BooleanField(default=False)
    km_total = models.DecimalField(default=0, max_digits=10, decimal_places=2, validators=[MinValueValidator(0)])
    fecha_set_km_total = models.DateTimeField(null=True, db_index=True)
    horas_uso = models.DecimalField(default=0, max_digits=10, decimal_places=2, validators=[MinValueValidator(0)])
    fecha_set_horas_uso = models.DateTimeField(null=True, db_index=True)
    propietario_json = JSONField(null=True, blank=True, default={})
    propietario_tarjeta = models.FileField(max_length=200, null=True, blank=True, upload_to='uploads/activos/propietario')
    documentos_json = JSONField(null=True, blank=True, default={})
    especificaciones_tecnicas = models.FileField(max_length=200, null=True, blank=True, upload_to='uploads/activos/especificaciones_tecnicas')
    seguridad_json = JSONField(null=True, blank=True, default={})
    varios_json = JSONField(null=True, blank=True, default={})
    ultimoreporte_json = JSONField(null=True, blank=True)

class GrupoActivos(Auditoria):
    nombre = models.CharField(max_length=50, db_index=True)
    activos = models.ManyToManyField('Activos.Activos', related_name="activos_grupo_m2m")
    cliente_id = models.ForeignKey('Clientes.Clientes', db_column="cliente_id", db_index=True, related_name="cliente_grupo_activo")

The query result is what I want, but when I see the Django logging, I see multiple SELECT for each result in the prefetch_related result.

DEBUG 2016-04-21 17:02:24,238 utils 1536 140353238808320 (0.003) SELECT "Activos_activos"."id", "Activos_activos"."is_active", "Activos_activos"."nombre", "Activos_activos"."tipo_activo", "Activos_activos"."placa", "Activos_activos"."tipo_vehiculo_id", "Activos_activos"."cliente_id", "Activos_activos"."icono_id", "Activos_activos"."vehiculo_seguro", "Activos_activos"."documentos_json", "Activos_activos"."varios_json", "Referencias_tipovehiculo"."id", "Referencias_tipovehiculo"."nombre", "Clientes_clientes"."id", "Clientes_clientes"."nombre", "Referencias_iconos"."id", "Referencias_iconos"."icono" FROM "Activos_activos" INNER JOIN "Clientes_clientes" ON ("Activos_activos"."cliente_id" = "Clientes_clientes"."id") LEFT OUTER JOIN "Referencias_tipovehiculo" ON ("Activos_activos"."tipo_vehiculo_id" = "Referencias_tipovehiculo"."id") INNER JOIN "Referencias_iconos" ON ("Activos_activos"."icono_id" = "Referencias_iconos"."id") WHERE "Activos_activos"."cliente_id" = 35 ORDER BY "Clientes_clientes"."nombre" ASC, "Activos_activos"."nombre" ASC; args=(35,)
DEBUG 2016-04-21 17:02:24,253 utils 1536 140353238808320 (0.001) SELECT "Equipos_equipos"."id", "Equipos_equipos"."identificador_celular", "Equipos_equipos"."identificador_satelital" FROM "Equipos_equipos" WHERE "Equipos_equipos"."activo_id" IN (779, 608, 691, 629, 768, 572, 639, 786, 610, 625, 646, 793, 761, 686, 764, 534, 749, 604, 533, 564, 711, 796, 599, 651, 682, 633, 641, 627, 661, 383, 769, 720, 726, 790, 773, 766, 782, 561, 784, 755, 783, 626, 603, 319, 498, 732, 448, 757, 432, 703, 658, 696, 792, 619, 752, 722, 512, 778, 727, 767, 750, 770, 605, 730, 678, 580, 607, 581, 712, 795, 613, 705, 390, 673, 657); args=(779, 608, 691, 629, 768, 572, 639, 786, 610, 625, 646, 793, 761, 686, 764, 534, 749, 604, 533, 564, 711, 796, 599, 651, 682, 633, 641, 627, 661, 383, 769, 720, 726, 790, 773, 766, 782, 561, 784, 755, 783, 626, 603, 319, 498, 732, 448, 757, 432, 703, 658, 696, 792, 619, 752, 722, 512, 778, 727, 767, 750, 770, 605, 730, 678, 580, 607, 581, 712, 795, 613, 705, 390, 673, 657)
DEBUG 2016-04-21 17:02:24,256 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 12; args=(12,)    
DEBUG 2016-04-21 17:02:24,259 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 21; args=(21,)
DEBUG 2016-04-21 17:02:24,260 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 23; args=(23,)
DEBUG 2016-04-21 17:02:24,261 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 28; args=(28,)
DEBUG 2016-04-21 17:02:24,262 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 37; args=(37,)
DEBUG 2016-04-21 17:02:24,263 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 38; args=(38,)
DEBUG 2016-04-21 17:02:24,264 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 43; args=(43,)
DEBUG 2016-04-21 17:02:24,265 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 44; args=(44,)
DEBUG 2016-04-21 17:02:24,266 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 45; args=(45,)
DEBUG 2016-04-21 17:02:24,267 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 46; args=(46,)
DEBUG 2016-04-21 17:02:24,268 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 48; args=(48,)
DEBUG 2016-04-21 17:02:24,269 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 52; args=(52,)
DEBUG 2016-04-21 17:02:24,269 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 56; args=(56,)
DEBUG 2016-04-21 17:02:24,271 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 208; args=(208,)
DEBUG 2016-04-21 17:02:24,272 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 215; args=(215,)
DEBUG 2016-04-21 17:02:24,273 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 220; args=(220,)
DEBUG 2016-04-21 17:02:24,274 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 228; args=(228,)
DEBUG 2016-04-21 17:02:24,275 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 293; args=(293,)
DEBUG 2016-04-21 17:02:24,276 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 302; args=(302,)
DEBUG 2016-04-21 17:02:24,277 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 303; args=(303,)
DEBUG 2016-04-21 17:02:24,278 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 305; args=(305,)
DEBUG 2016-04-21 17:02:24,279 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 306; args=(306,)
DEBUG 2016-04-21 17:02:24,280 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 307; args=(307,)
DEBUG 2016-04-21 17:02:24,281 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 308; args=(308,)
DEBUG 2016-04-21 17:02:24,282 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 309; args=(309,)
DEBUG 2016-04-21 17:02:24,283 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 310; args=(310,)
DEBUG 2016-04-21 17:02:24,285 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 333; args=(333,)
DEBUG 2016-04-21 17:02:24,285 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 338; args=(338,)
DEBUG 2016-04-21 17:02:24,287 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 340; args=(340,)
DEBUG 2016-04-21 17:02:24,288 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 342; args=(342,)
DEBUG 2016-04-21 17:02:24,289 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 346; args=(346,)
DEBUG 2016-04-21 17:02:24,290 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 365; args=(365,)
DEBUG 2016-04-21 17:02:24,291 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 395; args=(395,)
DEBUG 2016-04-21 17:02:24,292 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 396; args=(396,)
DEBUG 2016-04-21 17:02:24,293 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 398; args=(398,)
DEBUG 2016-04-21 17:02:24,294 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 404; args=(404,)
DEBUG 2016-04-21 17:02:24,295 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 405; args=(405,)
DEBUG 2016-04-21 17:02:24,296 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 416; args=(416,)
DEBUG 2016-04-21 17:02:24,297 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 417; args=(417,)
DEBUG 2016-04-21 17:02:24,298 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 425; args=(425,)
DEBUG 2016-04-21 17:02:24,299 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 439; args=(439,)
DEBUG 2016-04-21 17:02:24,300 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 440; args=(440,)
DEBUG 2016-04-21 17:02:24,301 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 445; args=(445,)
DEBUG 2016-04-21 17:02:24,302 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 446; args=(446,)
DEBUG 2016-04-21 17:02:24,303 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 448; args=(448,)
DEBUG 2016-04-21 17:02:24,304 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 449; args=(449,)
DEBUG 2016-04-21 17:02:24,305 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 457; args=(457,)
DEBUG 2016-04-21 17:02:24,306 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 470; args=(470,)
DEBUG 2016-04-21 17:02:24,307 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 471; args=(471,)
DEBUG 2016-04-21 17:02:24,308 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 476; args=(476,)
DEBUG 2016-04-21 17:02:24,309 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 479; args=(479,)
DEBUG 2016-04-21 17:02:24,310 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 480; args=(480,)
DEBUG 2016-04-21 17:02:24,311 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 481; args=(481,)
DEBUG 2016-04-21 17:02:24,312 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 482; args=(482,)
DEBUG 2016-04-21 17:02:24,314 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 494; args=(494,)
DEBUG 2016-04-21 17:02:24,315 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 495; args=(495,)
DEBUG 2016-04-21 17:02:24,316 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 513; args=(513,)
DEBUG 2016-04-21 17:02:24,317 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 520; args=(520,)
DEBUG 2016-04-21 17:02:24,318 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 523; args=(523,)
DEBUG 2016-04-21 17:02:24,319 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 526; args=(526,)
DEBUG 2016-04-21 17:02:24,320 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 527; args=(527,)
DEBUG 2016-04-21 17:02:24,321 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 713; args=(713,)
DEBUG 2016-04-21 17:02:24,322 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 714; args=(714,)
DEBUG 2016-04-21 17:02:24,323 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 715; args=(715,)
DEBUG 2016-04-21 17:02:24,324 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 720; args=(720,)
DEBUG 2016-04-21 17:02:24,325 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 721; args=(721,)
DEBUG 2016-04-21 17:02:24,326 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 722; args=(722,)
DEBUG 2016-04-21 17:02:24,327 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 723; args=(723,)
DEBUG 2016-04-21 17:02:24,328 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 789; args=(789,)
DEBUG 2016-04-21 17:02:24,329 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 793; args=(793,)
DEBUG 2016-04-21 17:02:24,330 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 794; args=(794,)
DEBUG 2016-04-21 17:02:24,331 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 795; args=(795,)
DEBUG 2016-04-21 17:02:24,332 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 803; args=(803,)
DEBUG 2016-04-21 17:02:24,333 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 825; args=(825,)
DEBUG 2016-04-21 17:02:24,334 utils 1536 140353238808320 (0.000) SELECT "Equipos_equipos"."id", "Equipos_equipos"."activo_id" FROM "Equipos_equipos" WHERE "Equipos_equipos"."id" = 866; args=(866,)

But when I make the query like this:

# (without 'queryset=Equipos.objects.only('id', 'identificador_celular', 'identificador_satelital')'):

queryset = self.model.objects.all() \
            .only('id', 'is_active', 'nombre', 'vehiculo_seguro', 'tipo_activo', 'placa', 'tipo_vehiculo_id',
                  'documentos_json', 'varios_json', 'cliente_id__nombre', 'icono_id') \
            .prefetch_related(Prefetch('equipo_activo', to_attr='equipos')) \
            .select_related('tipo_vehiculo_id', 'cliente_id', 'icono_id') \
            .order_by('cliente_id__nombre', 'nombre')

the log result is (just hit one time to the database):

    DEBUG 2016-04-21 17:05:36,338 utils 1747 140565799393024 (0.003) SELECT "Activos_activos"."id", "Activos_activos"."is_active", "Activos_activos"."nombre", "Activos_activos"."tipo_activo", "Activos_activos"."placa", "Activos_activos"."tipo_vehiculo_id", "Activos_activos"."cliente_id", "Activos_activos"."icono_id", "Activos_activos"."vehiculo_seguro", "Activos_activos"."documentos_json", "Activos_activos"."varios_json", "Referencias_tipovehiculo"."id", "Referencias_tipovehiculo"."nombre", "Clientes_clientes"."id", "Clientes_clientes"."nombre", "Referencias_iconos"."id", "Referencias_iconos"."icono" FROM "Activos_activos" INNER JOIN "Clientes_clientes" ON ("Activos_activos"."cliente_id" = "Clientes_clientes"."id") LEFT OUTER JOIN "Referencias_tipovehiculo" ON ("Activos_activos"."tipo_vehiculo_id" = "Referencias_tipovehiculo"."id") INNER JOIN "Referencias_iconos" ON ("Activos_activos"."icono_id" = "Referencias_iconos"."id") WHERE "Activos_activos"."cliente_id" = 35 ORDER BY "Clientes_clientes"."nombre" ASC, "Activos_activos"."nombre" ASC; args=(35,)
DEBUG 2016-04-21 17:05:36,353 utils 1747 140565799393024 (0.001) SELECT "Equipos_equipos"."id", "Equipos_equipos"."is_active", "Equipos_equipos"."tipo_equipo_id", "Equipos_equipos"."cliente_id", "Equipos_equipos"."fecha_instalacion", "Equipos_equipos"."identificador_celular", "Equipos_equipos"."operador_celular_id", "Equipos_equipos"."numero_celular", "Equipos_equipos"."numero_sim", "Equipos_equipos"."plan_datos_celular", "Equipos_equipos"."apn", "Equipos_equipos"."identificador_satelital", "Equipos_equipos"."plan_datos_satelital", "Equipos_equipos"."mensajes_consumidos", "Equipos_equipos"."notificacion_satelital", "Equipos_equipos"."operador_satelital", "Equipos_equipos"."activo_id", "Equipos_equipos"."varios_json", "Equipos_equipos"."redireccion_json" FROM "Equipos_equipos" WHERE "Equipos_equipos"."activo_id" IN (779, 608, 691, 629, 768, 572, 639, 786, 610, 625, 646, 793, 761, 686, 764, 534, 749, 604, 533, 564, 711, 796, 599, 651, 682, 633, 641, 627, 661, 383, 769, 720, 726, 790, 773, 766, 782, 561, 784, 755, 783, 626, 603, 319, 498, 732, 448, 757, 432, 703, 658, 696, 792, 619, 752, 722, 512, 778, 727, 767, 750, 770, 605, 730, 678, 580, 607, 581, 712, 795, 613, 705, 390, 673, 657); args=(779, 608, 691, 629, 768, 572, 639, 786, 610, 625, 646, 793, 761, 686, 764, 534, 749, 604, 533, 564, 711, 796, 599, 651, 682, 633, 641, 627, 661, 383, 769, 720, 726, 790, 773, 766, 782, 561, 784, 755, 783, 626, 603, 319, 498, 732, 448, 757, 432, 703, 658, 696, 792, 619, 752, 722, 512, 778, 727, 767, 750, 770, 605, 730, 678, 580, 607, 581, 712, 795, 613, 705, 390, 673, 657)

Now the log from Django logging:

Anyone know why happen this? and how to make the query with only one hit database for the prefetch_related?

当您only()使用only()时尝试包含activo_id字段。

Prefetch('equipo_activo', queryset=Equipos.objects.only('id', 'identificador_celular', 'identificador_satelital', 'activo_id'), to_attr='equipos'))

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM