Упорядочение запроса по совокупной сумме в Django, но не получение ожидаемого результата

Я пытаюсь создать сайт Django, который показывает список продуктов и упорядочивает их по общему количеству голосов, которые они получили. «Продукт» — это один класс, а «Голосование» — другой, с полем под названием оценка, которое может принимать значения 1, 0 или -1. Я хочу, чтобы Товары заказывались в соответствии с суммой баллов за голоса, связанные с каждым конкретным продуктом.

Вот мои модели.py:

class Product(models.Model):
    Content = models.TextField()
    creation_date = models.DateTimeField( default=datetime.now )
    total_votes = models.IntegerField( default=0 )

    def __unicode__(self):
            return self.content

class Vote(models.Model):
        voter = models.ForeignKey( User )
        product = models.ForeignKey( Product )
        score = models.IntegerField( default=0, choices=VOTE_SCORE_CHOICES)
        def __unicode__(self):
                return '%s - %s : %s' % (self.product.id, self.voter, self.score)

А вот мои просмотры.py:

def show_products( request):
        product_list = Product.objects.all()

        # set the field 'total_votes' in prduct to the sum of votes for each sentence
        for p in product_list:
                try:
                        v  = Vote.objects.filter( product = p ).aggregate(Sum('score'))['score__sum']
                except IndexError:
                        v  = 0
                p.total_votes = v
        p.save()

        # get the product that has the highest vote score
        try:
                top_product = product_list.order_by('-total_votes')[0].content
        except IndexError:
                top_product = 'no product'

        # reorder product_list according to total_votes
        product_list = product_list.order_by('total_votes')

        return render_to_response('product/product_detail.html',
                        {'product_list': product_list,
                                'top_produce': top_product,}, context_instance=RequestContext(request))

Итак, вы видите, что я получаю сумму баллов за голоса, связанные с каждым продуктом, а затем присваиваю это число каждому продукту ' total_votes», а затем изменить порядок списка продуктов в соответствии с «total_votes».

Однако результаты не такие, как ожидалось, и товары заказываются отдельно от результатов голосования. Может кто-нибудь сказать мне, что не так с кодом здесь? И еще, правильно ли подходить к этому вопросу?

Спасибо

8
задан user000001 17 August 2013 в 19:00
поделиться