Джанго. Запутанный запрос. Подсчет предметов - PullRequest
0 голосов
/ 03 декабря 2010

У меня на столе холодная марка.

class Mark(models.Model):
    media = models.ForeignKey('media.Media')
    mark = models.PositiveIntegerField()
    user = models.ForeignKey(User)

    class Meta:
        unique_together = ('media_object','user')

Как я могу получить набор запросов экземпляров медиа (или просто подсчитать медиа), у которых есть хотя бы один голос?

Могу ли я сделать это без extra?

ОБНОВЛЕНИЕ: Иными словами: я бегу по всей таблице и считаю все уникальные медиа. Если я нашел это во второй раз, я не считаю это. Другими словами: мне нужно рассчитывать уникальные медиа поля.

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

Я предполагаю, что модель "Марк" - это то, как пользователи голосуют.Чтобы получить все модели носителей с их количеством меток, вам нужно агрегация :

from django.db.models import Count

media_with_vote_count = Media.objects.annotate(vote_count=Count('mark_set'))

Затем вы можете использовать filter(), который ссылается на эту аннотацию:

voted_media = media_with_vote_count.filter(vote_count__gt=0)

Есть и другие полезные агрегаты.Например, вы можете рассчитать среднюю оценку для каждого носителя:

from django.db.models import Avg

media_with_markavg = Media.objects.annotate(average_mark=Avg('mark_set__mark'))
0 голосов
/ 03 декабря 2010
    mk = Mark.objects.all()
    mk.media.count()

Вы можете использовать функцию подсчета, но не уверены в своем вопросе, что вы хотите от нее сделать или что такое голосование.

EDIT:

          One row of media

          if( mk.media.count() > 0):
                    ......       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...