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

197
Vistas
comparando los valores de los campos del modelo A en el campo django del modelo B

Tengo 100k registros tanto en el modelo 'A' como en el modelo 'B'

Ex:

 class A(models.Model): user_email = models.EmailField(null=True, blank=True) user_mobile = models.CharField(max_length=30, null=True, blank=True) book_id = models.CharField(max_length=255, null=True, blank=True) payment_gateway_response = JSONField(blank=True, null=True) class B(models.Model): order = models.ForeignKey(A, null=True, blank=True) pay_id = models.CharField(max_length=250, null=True, blank=True) user_email = models.EmailField(null=True, blank=True) user_mobile = models.CharField(max_length=30, null=True, blank=True) created = models.DateTimeField(blank=True, null=True) total_payment = models.DecimalField(decimal_places=3, max_digits=20, blank=True, null=True)

Quiero obtener los objetos de B usando los valores de A

por ejemplo

 all_a = A.objects.all() for a in all_a: b = B.objects.filter(user_email=a.user_email, user_mobile=a.user_mobile)

Esto está bien, estoy obteniendo los resultados. Pero como son 100k registros, está tomando demasiado tiempo. la iteración del ciclo for está tomando tiempo. ¿Hay alguna forma más rápida de hacer esto en django?

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

0

Puede obtener una lista de cada valor en a y filtrar b con esos valores.

 a = A.objects.all() emails = list(a.values_list('user_email', flat=True)) mobiles = list(a.values_list('user_mobile', flat=True)) b = B.objects.filter(user_email__in=emails, user_mobile__in=mobiles)

Sin embargo, los resultados pueden tener un par de correo electrónico y móvil que no están emparejados en A. Pero si se asegura de que los correos electrónicos y los móviles serán únicos en A y el correo electrónico y el móvil en cada B se basan en uno de los modelos A', entonces no tendras ningun problema.

over 4 years ago · Santiago Trujillo Denunciar

0

Si no está interesado en almacenar en caché el modelo A, puede tener un aumento de rendimiento usando iterator() (consulte la referencia https://docs.djangoproject.com/en/1.11/ref/models/querysets/#iterator ):

 for a in A.objects.all().iterator(): b = B.objects.filter(user_email=a.user_email, user_mobile=a.user_mobile)
over 4 years ago · Santiago Trujillo Denunciar

0

Tu puedes hacer

 import operator from django.db.models import Q q = A.objects.all().values('user_email', 'user_mobile') B.objects.filter(reduce(operator.or_, [Q(**i) for i in q]))

Si desea hacer algunas operaciones con cada objeto b depende de a . Este no es el camino.

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