如何在 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 中按模型字段的子字符串对对象进行排序

在 django(postgres 后端)中按数字字符串排序查询结果

如何在搜索栏中按布尔字段过滤 - django

如何在 mongoDb 中按多个字段排序

如何在引导选项卡块中按 django 模板中的多对多字段过滤对象

如何在 SurveyMonkey v3 响应/批量中按 date_modified 以外的字段排序