Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 注释中的多个连接_Python_Django_Django Models_Django Orm_Django Aggregation - Fatal编程技术网

Python 注释中的多个连接

Python 注释中的多个连接,python,django,django-models,django-orm,django-aggregation,Python,Django,Django Models,Django Orm,Django Aggregation,我有一个帖子模型,它与用户有很多关系,以反映喜欢的特性。此外,帖子本身也有外键关系,因为每个帖子都可以是对现有帖子的评论,只有一个深度级别是强制的——并没有讨论树 现在我尝试使用聚合来获得最活跃的讨论。我想计算每个帖子的分数,它是喜欢、评论和评论喜欢的总和 以下SQL操作非常有效: SELECT "posting_post"."id", "posting_post"."title", "posting_post"."content", "posting_

我有一个帖子模型,它与用户有很多关系,以反映喜欢的特性。此外,帖子本身也有外键关系,因为每个帖子都可以是对现有帖子的评论,只有一个深度级别是强制的——并没有讨论树

现在我尝试使用聚合来获得最活跃的讨论。我想计算每个帖子的分数,它是喜欢、评论和评论喜欢的总和

以下SQL操作非常有效:

SELECT "posting_post"."id",
       "posting_post"."title",
       "posting_post"."content",
       "posting_post"."pub_date",
       "posting_post"."parent_id",
       "posting_post"."user_id",
       COUNT(DISTINCT T4."id") AS "cc",
       COUNT(DISTINCT "posting_post_likes"."id") AS "lc",
       COUNT(DISTINCT T7."id") AS "clc"
FROM "posting_post"
LEFT OUTER JOIN "posting_post" T4 ON ("posting_post"."id" = T4."parent_id")
LEFT OUTER JOIN "posting_post_likes" ON ("posting_post"."id" = "posting_post_likes"."post_id")
LEFT OUTER JOIN "posting_post_likes" T7 ON (T4."id" = T7."post_id")
WHERE "posting_post"."parent_id" IS NULL
GROUP BY "posting_post"."id",
         "posting_post"."title",
         "posting_post"."content",
         "posting_post"."pub_date",
         "posting_post"."parent_id",
         "posting_post"."user_id"
ORDER BY cc+lc+clc DESC LIMIT 10
当我尝试使用aggreagtions时:

Post.objects.filter(parent=None).annotate(clc=models.Count('comments__likes', discinct=True), cc=models.Count('comments', distinct=True), lc=models.Count('likes', distinct=True))[:10]
生成以下SQL:

SELECT "posting_post"."id",
       "posting_post"."title",
       "posting_post"."content",
       "posting_post"."pub_date",
       "posting_post"."parent_id",
       "posting_post"."user_id",
       COUNT(DISTINCT T4."id") AS "cc",
       COUNT(DISTINCT "posting_post_likes"."user_id") AS "lc",
       COUNT(T7."user_id") AS "clc"
FROM "posting_post"
LEFT OUTER JOIN "posting_post" T4 ON ("posting_post"."id" = T4."parent_id")
LEFT OUTER JOIN "posting_post_likes" ON ("posting_post"."id" = "posting_post_likes"."post_id")
LEFT OUTER JOIN "posting_post_likes" T7 ON (T4."id" = T7."post_id")
WHERE "posting_post"."parent_id" IS NULL
GROUP BY "posting_post"."id",
         "posting_post"."title",
         "posting_post"."content",
         "posting_post"."pub_date",
         "posting_post"."parent_id",
         "posting_post"."user_id"
ORDER BY "posting_post"."pub_date" DESC LIMIT 10
这并不像我想象的那样有效。请注意主要区别: COUNTDISTINCT T7.id作为clc vs。 COUNTT7.user\u id作为clc


是否有某种方法可以强制django计算id而不是用户id,或者有某种更聪明的方法可以使用聚合来实现第一个SQL返回这样的结果?

为什么使用distinct=True?@BurhanKhalid不使用discint=True的数字是完全错误的。当我有一个注释时,它不是必需的,但是有三个注释。