如何在Django中按照复杂计算字段排序?

6

我有一个像这样的模型:

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

我需要排名前十的最佳程序,因此我在views.py中进行了尝试:

best_rated = Program.objects.filter(Q(creator__profile__type = 'us')).extra(select={ 'total' : 'votes_sum / voters_counter' }).extra(order_by=['total'])[:10]

问题出现在没有用户投票时,会出现除以零的情况。

我找不到解决方法。有什么帮助吗?拜托了。


我有一个比想象中更简单的解决方案:仅排除没有投票的记录!

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

1个回答

1
你可以尝试在你的视图中创建一个循环,类似于以下代码:
if ZeroDivisionError: 
    total = 0

这只是一个起点,但希望能够帮到你。

编辑:这可能更好一些。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接