2011-02-28 39 views
6

我有这样一个模型:我如何通过Django中的计算字段复合来排序?

class Program(models.Model): 
    votes_sum = models.IntegerField(max_length=10, default=0) 
    voters_counter = models.IntegerField(max_length=10, default=0) 
    ... 

我需要的10名最受好评的程序,所以,我在我的views.py尝试:

best_rated = Program.objects.filter( Q(creator__profile__type = '我们'))额外(选择= { '总': 'votes_sum/voters_counter'}。)额外(ORDER_BY = [ '总'])[10]

的问题是当没有用户投票时,因为除以零发生。

我找不到解决此问题的另一种方法。任何帮助?请。


我有一个比我想象的更简单的解决方案。只需排除没有投票的记录!

best_rated = Program.objects.filter(Q(creator__profile__type = '我们')&〜Q(voters_counter = 0))的额外(选择= { '总': 'votes_sum/voters_counter'})。额外(ORDER_BY = [ '总'])[10]

回答

1

你可以尝试使你的观点一个循环,会是这样的:

if ZeroDivisionError: 
    total = 0 

这只是一个起点,但希望它有帮助

编辑:这可能会更好

try: 
    total = votes_sum/voters_count 
except ZeroDivisionError: 
    total = 0 
return total 
相关问题