• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

285
Views
¿Cómo crear un objeto django queryset para unión interna?

Tengo dos mesas.

 class DibbsSpiderDibbsMatchedProductFieldsDuplicate(models.Model): nsn = models.TextField() nsn2 = models.TextField() cage = models.TextField() part_number = models.TextField() company_name = models.TextField(blank=True, null=True) supplier = models.TextField(db_column='Supplier', blank=True, null=True) # Field name made lowercase. cost = models.CharField(db_column='Cost', max_length=15, blank=True, null=True) # Field name made lowercase. list_price = models.CharField(db_column='List_Price', max_length=15, blank=True, null=True) # Field name made lowercase. gsa_price = models.CharField(db_column='GSA_Price', max_length=15, blank=True, null=True) # Field name made lowercase. hash = models.TextField() nomenclature = models.TextField() technical_documents = models.TextField() solicitation = models.CharField(max_length=32) status = models.CharField(max_length=16) purchase_request = models.TextField() issued = models.DateField() return_by = models.DateField() file = models.TextField() vendor_part_number = models.TextField() manufacturer_name = models.TextField(blank=True, null=True) product_name = models.TextField(blank=True, null=True) unit = models.CharField(max_length=15, blank=True, null=True) class Meta: managed = False db_table = 'dibbs_spider_dibbs_matched_product_fields_duplicate' class DibbsSpiderSolicitation(models.Model): line_items = models.IntegerField() nsn = models.TextField() nomenclature = models.TextField() technical_documents = models.TextField() purchase_request = models.TextField() class Meta: managed = False db_table = 'dibbs_spider_solicitation'

¿Cuál será la consulta Django equivalente para la combinación interna de dos tablas en la columna nsn ? Mi función de vistas será como

 def inner(request,nsn): u_m = DibbsSpiderDibbsMatchedProductFieldsDuplicate.objects.filter(nsn2__icontains=id) c_m = DibbsSpiderSolicitation.objects.filter(nsn__icontains=id) obj = ....................... context = {'obj':obj} return render(request,,"a.html",context)

el conjunto de consultas debe devolver la combinación de dos tablas según el nsn común.

el obj debería devolver la combinación de u_m y c_m . Si u_m contiene solo una fila y c_m contiene muchas filas, el obj debe replicar los valores de u_m.

over 3 years ago · Santiago Trujillo
3 answers
Answer question

0

Puedes probar algunas de las opciones:

  1. Agregar restricción de clave externa y usar select_related según esta publicación
  2. Consulta sin procesar como se menciona en esta publicación de stackoverflow y otra publicación con uniones personalizadas

3. Usando la consulta IN según la siguiente lógica:

 DibbsSpiderDibbsMatchedProductFieldsDuplicate.objects.filter( nsn2__in=DibbsSpiderSolicitation.objects.filter(nsn__icontains='text_to_search').values('origin'))
over 3 years ago · Santiago Trujillo Report

0

Primero, grandes nombres de modelos. Pongámosles un alias: DibbsSpiderDibbsMatchedProductFieldsDuplicate is Apples ; DibbsSpiderLa solicitud es naranjas

 inner_qs = Apples.objects.all().extra( tables=("yourapp_oranges",), where=("yourapp_apples.nsn=yourapp_oranges.nsn",), )

La documentación menciona que esta API quedará obsoleta: https://docs.djangoproject.com/en/4.0/ref/models/querysets/#extra

over 3 years ago · Santiago Trujillo Report

0

Opción n. ° 1: introducir una clave externa (recomendada):

Bajo la clase DibbsSpiderDibbsMatchedProductFieldsDuplicate agregue:

 fkey = models.ForeignKey('DibbsSpiderSolicitation')

entonces puedes acceder fácilmente a su unión:

 obj = DibbsSpiderDibbsMatchedProductFieldsDuplicate.Objects.filter(fkey__nsn).select_related()

Ahora es su elección lo que desea hacer con nsn2

Opción #2 - sin una ForeigKey:

SQL sin procesar:

 obj = DibbsSpiderDibbsMatchedProductFieldsDuplicate.objects.extra(where = ['''SELECT * FROM DibbsSpiderSolicitation INNER JOIN DibbsSpiderDibbsMatchedProductFieldsDuplicate ON DibbsSpiderSolicitation.nsn = DibbsSpiderDibbsMatchedProductFieldsDuplicate.nsn2;''']) # or obj = DibbsSpiderDibbsMatchedProductFieldsDuplicate.objects.raw('''SELECT * FROM DibbsSpiderSolicitation INNER JOIN DibbsSpiderDibbsMatchedProductFieldsDuplicate ON DibbsSpiderSolicitation.nsn = DibbsSpiderDibbsMatchedProductFieldsDuplicate.nsn2;''')

Usando filtro:

 obj = DibbsSpiderSolicitation.objects.filter(nsn__in=DibbsSpiderDibbsMatchedProductFieldsDuplicate.objects.nsn2)

Lo siento, no pude probar ninguno.

over 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error