2015-03-01 2 views
0

Я выполняю следующий необработанный запрос и получаю ошибку: Raw query must include the primary key.Django-запрос, соответствующий необработанному запросу

user = User.objects.get(email_id=request.session['email_id']) 
query = 'select date, sum(revenue) from dashboard_revenue where app_id_id IN (select id from dashboard_app where user_id_id=1) group by date' 
details = Revenue.objects.raw(query) 
context = {'details': details} 
return render(request, 'index.html', context) 

Может кто-то исправить этот вопрос или помочь мне с соответствующим запросом на django?

+0

Аналогично: http://stackoverflow.com/questions/13403609/how-to-group-by-and- aggregate-with-django –

+1

Вы хотите использовать только raw sql? или с помощью queryset тоже хорошо? – levi

+0

@levi использование набора запросов оценивается :) –

ответ

2

Использование .raw() работает только в том случае, если вы возвращаете вещи, которые могут быть сопоставлены экземплярам модели. Однако, поскольку вы возвращаете агрегирование, они не могут быть сопоставлены с объектами Revenue, поэтому вы получаете ошибки с кодом.

Что вам нужно сделать, это execute your custom SQL directly against the database, вдоль линий:

from django.db import connection 

def my_custom_sql(self): 
    cursor = connection.cursor() 

    query = 'select date, sum(revenue) from dashboard_revenue where app_id_id IN (select id from dashboard_app where user_id_id=%s) group by date' 
    user_id = 1 
    cursor.execute(query, [user_id]) 
    rows = cursor.fetchall() 

    return rows 
Смежные вопросы