2017-05-12 1 views
0

Müssen aggregierte Daten aus 2 verschiedenen Tabellen abrufen.Union Abfrage von Django ORM

Elements 
element_type tempcolumn 
    xyz   test1 
    pqr   test2 
    xyz   test3 

Users: 
    User_names   
    auser 
    buser 
    cuser 

Notwendigkeit Ausgabe in folgendem Format

element_type count 
    xyz    2 
    pqr    1 
    users   3 

SQL Query Beispiel:

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

union 

    select 'users',count(*) from Users 

können wir mit django ORM excute gleich?

Antwort

1

Auf Django, können Sie | verwenden zwei querysets beitreten, aber ich verwende es nicht hier.

Da Werte/annotate tatsächlich eine Liste von Tupeln zurückgibt statt eines query_set

Sie raw SQL auf Django laufen kann, aber roh ist für die Optimierung. 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()