Самый эффективный способ получить количество предметов с одинаковым значением в Django Query - PullRequest
1 голос
/ 02 декабря 2011

Я ищу самый быстрый способ вычислить следующее:

Учитывая модель контакта, подобную этой:

class Contact(basemodel):

    item = models.ForeignKey(Item)
    recipient = models.ForeignKey(User, )
    sender = models.ForeignKey(User, )

Я ищу самый быстрый запрос, чтобы получить список отправителейдля определенного элемента с количеством объектов контактов, которые у них есть для этого сценария.

Я бы получил список отправителей, как этот: senders = Contact.objects.filter (item = self.item) .values_list ('sender', flat = True)

но тогда мне нужно будет подсчитать количество раз, когда каждый отправитель находится в списке.

Я уверен, что есть более быстрый и быстрый способ.

1 Ответ

2 голосов
/ 02 декабря 2011

Прежде всего, если ваша модель имеет два поля с одинаковыми отношениями, вы должны отправить обратное имя, которое связано с именем, например:

class Contact(basemodel):

    item = models.ForeignKey(Item)
    recipient = models.ForeignKey(User,related_name='recipient_contact' )
    sender = models.ForeignKey(User,related_name='sender_contact' )

После этого, чтобы получить список отправителей, вы можете выполнить Запрос в самом отправителе (Пользователь) и просто аннотировать счет:

User.objects.filter(sender_contact__item=self.item).annotate(count=Count('sender_contact'))

Я думаю, это сработает! дайте мне знать что-нибудь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...