如何在 Django 中按计算字段复杂排序?
Posted
技术标签:
【中文标题】如何在 Django 中按计算字段复杂排序?【英文标题】:How can i order by a calculated field complex in Django? 【发布时间】:2011-07-06 01:05:37 【问题描述】:我有一个这样的模型:
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 / 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= ['总计'])[:10]
【问题讨论】:
【参考方案1】:您可以尝试在您的视图中创建一个类似于以下内容的循环:
if ZeroDivisionError:
total = 0
这只是一个起点,但希望能有所帮助
编辑:这可能会更好
try:
total = votes_sum / voters_count
except ZeroDivisionError:
total = 0
return total
【讨论】:
以上是关于如何在 Django 中按计算字段复杂排序?的主要内容,如果未能解决你的问题,请参考以下文章
在 django(postgres 后端)中按数字字符串排序查询结果