【问题标题】:Django annotate Avg of foreign modelDjango 标注国外模型的 Avg
【发布时间】:2020-09-04 13:01:49
【问题描述】:

文章和评论两个模型,关系是一对多的(一篇文章有​​很多评论)。有些文章没有任何评论。

我想按评论评分排序文章,因此我使用带有 AVG 的注释:

ArticleQueryset.annotate(rating=models.Avg('reviews__rating')).order_by('-rating')

问题在于,没有评论的文章评分值为 False,并且不知何故高于最高评分。结果是第一个结果没有任何评分,然后显示评分最高的文章。

【问题讨论】:

    标签: django annotations


    【解决方案1】:

    order_by()方法中使用nulls_last=True作为

    ArticleQueryset.annotate(
        rating=models.Avg('reviews__rating')
    ).order_by(models.F('rating').desc(nulls_last=True))

    【讨论】:

    • 我得到错误:查询集对象没有属性'desc'
    • desc 如果是 F() 表达式。可能,你有错别字
    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2016-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    相关资源
    最近更新 更多