簡體   English   中英

如何在 Django 中優化循環“For”

[英]How to Optimize a loop "For" in Django

我想優化這個功能,因為它們花費的時間太長,每個功能都帶來特定的屬性,如果你能幫助我。 我認為可能有一種方法可以在函數中調用屬性。 這些功能是用 python 和 Django 制作的。

這是我到目前為止所做的。

函數的定義。

cand_seleccionados = ListaFinal.objects.filter(interesado__id_oferta=efectiva.oferta.id)

seleccionados_ids = cand_seleccionados.values_list("interesado_id", flat=True)

cand_postulados = Postulados.objects.filter(
    interesado__id_oferta=efectiva.oferta.id
).exclude(interesado_id__in=seleccionados_ids)

postulados_ids = cand_postulados.values_list("interesado_id", flat=True)

cand_entrevistados = Entrevistados.objects.filter(
    interesado__id_oferta=efectiva.oferta.id
).exclude(interesado_id__in=postulados_ids)

這是 cand_Postulados 的循環,其他的都是一樣的,所以我認為沒有必要放更多

for p in cand_postulados:

    postulado = dict()

    telefono = Perfil.objects.values_list("telefono", flat=True).get(
        user_id=p.interesado.candidato.id
    )

    postulado["id"] = p.interesado.candidato.id
    postulado["nombre"] = p.interesado.candidato.first_name
    postulado["email"] = p.interesado.candidato.email
    postulado["teléfono"] = telefono

    if p.interesado.id_oferta.pais is None:
        postulado["pais"] = "Sin pais registrado"
    else:
        postulado["pais"] = p.interesado.id_oferta.pais.nombre

    postulado["nombre_reclutador"] = p.interesado.id_reclutador.first_name
    postulado["id_reclutador"] = p.interesado.id_reclutador.id

    postulados.append(postulado)

如果我正確地閱讀了你的循環,這應該在一個查詢中完成所有事情。 (如果我讀錯了,你可能需要調整一些__跨越查找。特別是,我不一定知道你的Perfil的反向名稱與user關系。)

cand_postulados = (
    Postulados.objects
    .filter(interesado__id_oferta=efectiva.oferta.id)
    .exclude(interesado_id__in=seleccionados_ids)
)
postulados = list(cand_postulados.values(
    teléfono="interesado__candidato__telefono",
    nombre="interesado__candidato__first_name",
    email="interesado__candidato__email",
    pais="interesado__id_oferta__pais__nombre",
    nombre_reclutador="interesado__id_reclutador__first_name",
    id_reclutador="interesado__id_reclutador__id",
))
for datum in postulados:
    if not datum.get("pais"):
        datum["pais"] = "Sin pais registrado"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM