2014-12-26 2 views
2

Я хочу, чтобы получить число «чатов» от 2 пользователей в моем приложении, и у меня есть таблица под названием «Message», который содержит:Группировка в Django ORM

sender_user | reciever_user | contain | date 

Я хочу, чтобы сделать запрос, дает мне все сообщения между двумя разными пользователями, я знаю в SQL, мне нужно использовать GROUP BY, но как я могу получить список сообщений с помощью Django ORM? Есть ли у вас какие-либо идеи?

Примечание: sender_user и reciever_user являются экземплярами User таблицы)

+0

следить за этим - http://stackoverflow.com/questions/629551/how-to-query-as-group- by-in-django это может быть решением вашей проблемы. – jewelhuq

+0

Да, я попытался, но хочу получить информацию получателя и отправителя в объекте sigle, а не только идентификатор и количество записей. Есть ли у вас какие-либо идеи? –

+0

Нет, потому что я, что список «чатов» (сообщения между 2 пользователями), которые включают request.user, поэтому «ГДЕ» вы говорите, просто дайте мне один «чат». –

ответ

3

Вам не нужно «GROUP BY» в описанном случае. Вам нужно отфильтровать пользователей-отправителей и получателей - это эквивалентно предложению SQL «WHERE». И вы также закажете дату.

Message.objects.filter(sender_user='sender', receiver_user='receiver') 
+0

Я думаю, что я был не совсем конкретным. Если я это сделаю, я получу только «чаты» меня и другого человека. Я хочу получить ВСЕ чаты, в которых я участвую. –

+0

Тогда просто используйте sender_user или receiver_user в зависимости от того, какой пользователь вам нужен. Закажите результаты с помощью пользователя sender_user и получателя. Вы указали любое требование, требующее группировки. – mhawke

+0

Да, но это даст мне все «Сообщения», и я хочу только «Чаты», потому что я хочу показать все чаты в списке на html. –

0

Вы можете использовать метод аннотации запроса. метод анотации - это восстание для группы по предложениям в джанго.

Ваш запрос должен быть, вероятно, что-то вроде:

User.objects.filter(message_set__sender=me).annotate(message_count=Count('message')) 

Ссылка: https://docs.djangoproject.com/en/1.7/topics/db/aggregation/#order-of-annotate-and-filter-clauses

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