以下是一些注释列表:
count_set = {
'num_followers': 'following_followinguser_leader',
'num_followings': 'following_followinguser_follower',
}
for k, v in count_set.iteritems():
qs = qs.annotate(**{k: models.Count(v, distinct=True)})
return qs
我正在寻找添加all
字段的解决方案,该字段将是num_followers
和num_followings
中的一些独特元素。
问题是应该足够快,最好的方法是纯SQL,但是django ORM怎么样?
UPD:以下
的PostgreSQL表架构 Table "public.following_followinguser"
Column | Type | Modifiers
-----------------+--------------------------+------------------------------
id | integer | not null
follower_id | integer | not null
leader_id | integer | not null
关注者和领导者ID是从AbstractUser
继承的自定义用户模型的链接。 following_followinguser_leader
是上述模型的领导者字段的相关名称。
例如让关注者将成为具有ID的用户:1,2,3,用户4是具有ID 1,5,6的用户的追随者。比所有应该是:1,2,3, 5,6。我需要的只是数字,即5。
答案 0 :(得分:1)
生成的SQL可能会像通过Django ORM一样紧密。您始终可以通过打印qs.query.sql_with_params()并查看生成的SQL来验证它。如果需要,可以在列中添加索引以加快计数(postgres 9.2 +)。