2017-05-12 1 views
0

Besoin d'aller chercher des données agrégées à partir de 2 tables difrent.Demande de l'Union de Django ORM

Elements 
element_type tempcolumn 
    xyz   test1 
    pqr   test2 
    xyz   test3 

Users: 
    User_names   
    auser 
    buser 
    cuser 

besoin d'une sortie au format suivant

element_type count 
    xyz    2 
    pqr    1 
    users   3 

SQL Query Exemple:

SELECT element_type, count(*) 
    FROM Elements group by element_type 

union 

    select 'users',count(*) from Users 

peut nous excute même avec django ORM?

Répondre

1

Sur Django, vous pouvez utiliser | pour joindre deux ensembles de requêtes mais je ne l'utilise pas ici.

Parce que les valeurs/annoter retourne en fait une liste de tuples au lieu d'un query_set

vous pouvez exécuter SQL cru sur Django mais brut est pour l'optimisation. https://docs.djangoproject.com/en/1.9/topics/db/sql/

object_count = Elements.objects.all().values('element_type').annotate(total=Count('element_type')) 
response_data = {} 
for q in object_count: 
    if q['element_type'] == 'xyz': 
     response_data['total_ xyz'] = q['total'] 
    if q['element_type'] == 'pqr': 
     response_data['total_ pqr'] = q['total'] 
response_data['users_count'] = MyUser.objects.all().count()