0

I'm a beginner in Django: how can I write this mysql query for combine different tables?

(SELECT "fatture_produzione" as tab, id, numero, data, iva, totale, azienda_id as azienda, id_fornitori_id as fornitori FROM fatture_fatture_produzione) 
UNION 
(SELECT "fatture_fornitori" as tab, id, numero, data, iva, totale, azienda_id as azienda, fornitori_diversi_id as fornitori FROM fatture_fatture_fornitori) 
UNION 
(SELECT "fatture_professionisti" as tab, id, numero, data, iva, totale, azienda_id as azienda, professionisti_id as fornitori FROM fatture_fatture_professionisti) 
order by data

I try this in my view:

fatture_fornitori_var = fatture_fornitori.objects.values( id='id', data='data', numero='numero', totale='totale', iva='iva', azienda='azienda_id', fornitori='fornitori_diversi_id').filter(azienda_id=azienda).order_by("data")

fatture_professionisti_var = fatture_professionisti.values(id='id', data='data', numero='numero', totale='totale', iva='iva', azienda='azienda_id', fornitori='professionisti_id').objects.filter(azienda_id=azienda ).order_by("data")

fatture_produzione_var = fatture_produzione,values(id='id', data='data', numero='numero', totale='totale', iva='iva', azienda='azienda_id', fornitori='id_fornitori_id').objects.filter(azienda_id=azienda).order_by("data")

And... with itertools:

fatture_dare = sorted(
    chain(fatture_fornitori_var, fatture_professionisti_var, fatture_produzione_var),
    key=attrgetter('data'))

but I can't output in template:

{% for fattura in fatture_dare %}
<tr role="row" class="odd">
   <td><nobr>{{ fattura.data|date:"d-m-Y" }}</nobr></td>
   <td>{{fattura.azienda}}</td>
   <td>{{fattura.numero}}</td>
</tr>   
{% endfor %}

Thank you!

pistolpete
  • 968
  • 10
  • 20
  • Can you show your models.py files? People usually use [union](https://stackoverflow.com/questions/4411049/how-can-i-find-the-union-of-two-django-querysets) to do this instead of itertools. – pistolpete Mar 08 '19 at 15:38

1 Answers1

0

Use union

fatture_dare = fatture_fornitori_var.union(fatture_professionisti_var, fatture_produzione_var).order_by("data")
pistolpete
  • 968
  • 10
  • 20