回答

收藏

如何在Django QuerySet添加其他列

技术问答 技术问答 414 人阅读 | 0 人回复 | 2023-09-14

我有一个带Books的QuerySet,我想score为每个Book结果添加了一个字段。" @- y& x& G. T, X
qs = Book.objects.all()在原始SQL中,我会写:
# d# d0 _% `3 @2 \2 V2 W2 r# V2 \! I. ESELECT    *,   (       (SELECT COUNT(*) FROM votes WHERE value=1 AND book=b.id) -         (SELECT COUNT(*) FROM votes WHERE value=-1 AND book=b.id)   ) AS scoreFROM    Book b;如何在Django实现?我试过了annotate(),但似乎不适合这种东西。
7 z2 z# k) T( N2 f/ a- P# |7 ~                                                                6 g5 v* b6 o  z$ a3 m; m
    解决方案:                                                               
, K4 Y4 T" N' M                                                                如果票数可能只有1和-1.您可以使用刚才提到的总结注释:Book.objects.annotate(score=Sum('votes__value'))。
7 ?5 A( E' T" P8 ?* F如果有更多可能的值,可以添加.filter(votes__value__range=(1,1)在上述查询中过滤注释。8 j2 W7 B1 S# }( u  C* R
如果是更复杂的,你将不得不使用extra与select。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则