我如何通过Django中的计算字段复合体进行排序?

时间:2011-02-28 20:13:21

标签: django django-views django-queryset

我有一个这样的模型:

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 ='us'))。extra(select = {'total':'votes_sum / votes_counter'})。extra(order_by = ['total'])[: 10]

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

我找不到另一种方法来解决这个问题。有帮助吗?请。


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

  

best_rated = Program.objects.filter(Q(creator__profile__type ='us')& ~Q(votes_counter = 0))。extra(select = {'total':'votes_sum / votes_counter'})。extra(order_by = [ '总'])[10]

1 个答案:

答案 0 :(得分:1)

您可以尝试在视图中创建一个类似于:

的循环
if ZeroDivisionError: 
    total = 0

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

编辑这可能会更好

try:
    total = votes_sum / voters_count
except ZeroDivisionError:
    total = 0
return total