Django:通过外键AVG排名进行注释和排序而不是过滤

时间:2017-01-18 04:54:16

标签: django django-templates django-views

我有一个广告模型和一个评论模型,由<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> <div class="container"> <div class="row"> <div class="col-lg-6"> <p>asdf</p> <p>asdf</p> <p>asdf</p> <p>asdf<br><br>asdf<br>asdf</p> <p>asdf<br><br>asdf<br>asdf</p> <p>asdf</p> <p>asdf</p> <p>asdf</p> </div> <div class="col-lg-6"> <p>asdf<br><br>asdf<br>asdf</p> <p>asdf</p> <p>asdf</p> <p>asdf<br><br>asdf<br>asdf</p> <p>asdf</p> <p>asdf</p> <p>asdf<br><br>asdf<br>asdf</p> </div> </div> </div>相关我试图获得他们的评论平均排名最高的问题。 例如: AD1 - 平均排名为4。 AD2 - 平均排名为5。

在模板中,结果应首先显示AD2,然后显示AD1秒。

我在我的视图中使用它,但它没有正确显示。 DB是postgres。如果我更改Foreignkey('adfk')它首先显示Ad1而Ad2显示第二,我的意思是至少考虑order_by。

('-rating') to ('rating')

1 个答案:

答案 0 :(得分:0)

看起来您想要控制NULL和非NULL值的顺序。 PosgreSQL中有一个feature。但是Django不支持它。

但您可以执行以下操作:

questionlist = questionlist.annotate(rating=Avg('adfk__rank'))
questionlist = questionlist.extra(
    select={'adfk_is_null': 'adfk_id IS NULL'})
questionlist = questionlist.order_by('adfk_is_null', '-rating')

P.S。您似乎在尝试汇总单个值,因此我建议您执行F而不是Avg