django - 通过两个(或多个)字段的总和对 Django 查询集进行排序

标签 django

我发现了一些与我的问题相似的问题,但其中大多数都过时了,或者太(或太少)冗长而无济于事。

我有一个这样的模型:

class Breakfast(models.Model):
    count_eggs = models.IntegerField()
    count_bacon = models.IntegerField()
    had_toast = models.BooleanField()

现在,在构建 RESTful API 时,我需要能够按 count_eggs + count_bacon 的总数对早餐对象进行排序。无需将其永久存储在模型上。

许多当前和流行的问题都暗示了这样的事情:
Breakfast.objects.extra(
    select={'total_food':'count_eggs + count_bacon'},
    order_by=('total_food',)
)

这似乎对很多人都有效,但是 Django docs appear to dissuade this solution .因此,在 1.10+ 世界中,对 Django 中的两个(或多个)字段的总和进行此类过滤的最佳/正确方法是什么?

最佳答案

你应该使用注释,我有一个我的例子并适应你的情况,试试这个:

from django.db.models import F, Sum

Breakfast.objects.all().\
            annotate(total_food=Sum(
                F('count_eggs ') + F('count_bacon'))
            ).\
            order_by('total_food')

关于django - 通过两个(或多个)字段的总和对 Django 查询集进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47757857/

相关文章:

python - Django 测试运行器因 "relation does not exist"错误而失败

python - 将列表转换为查询集

python - 适合运行多个站点的 Django 开发服务器的 cookie 域

python - django + javascript 应用程序框架(不是 Jquery)?

django - 为什么我的脆表单布局被忽略了?

python - 如何修复 "AttributeError at/api/doc ' AutoSchema' 对象在 Django 中没有属性 'get_link'"错误

python - 将记录从第一个 Django 模型移动到第二个,然后从第一个删除它

python - 在模板标签中获取模板名称(Django)

javascript - 如何检查 django 模板中哪些复选框已选中或未选中?

django - gae_mini_profiler {% profiler_includes %} 给出无效 block 标记 : 'profiler_includes'