2010-06-27 366 views
0

用下面的代碼的兩個不同的聚合值:排序方式關係的領域

from django.db import models 

class Blogpost(models.Model): pass 

class Vote(models.Model): 
    question = models.ForeignKey(Blogpost) 
    TYPE_CHOICES = (
     ('up', 'Up-Votes'), 
     ('dn', 'Down-Votes'), 
    ) 
    type = models.CharField(max_length=2, choices=TYPE_CHOICES) 

什麼是獲得一組所有相關博客文章中,通過了贊成票第一有序化的最佳方式,然後向下票,無需通過QuerySet.extra()函數編寫SQL?

回答

0

更改投票選擇的值,以便它們是以所需方式排序的整數。

例如,up-vote可以是1,down-a-1,而默認值可以是-2。

然後你可以用一個ORDER_BY檢索結果:

posts = Blogpost.objects.order_by('vote__type') 

這給了,它變得非常容易獲得使用Sum聚合投票總的附加優勢

from django.db.models import Sum 
vote_score = Vote.objects.filter(question=blogpost_instance).filter(type__gte=-1).aggregate(Sum('type'))