gpt4 book ai didi

python - django-voting 的投票排序问题

转载 作者:行者123 更新时间:2023-12-01 00:01:05 29 4
gpt4 key购买 nike

我有一个模型帖子和一个模型投票。 Vote(来自 django-voting)本质上只是一个指向 Post 和 -1、0 或 1 的指针。

还有巡回赛,它是开始日期和结束日期。在锦标赛开始和结束之间发布的帖子将提交给该锦标赛。

为了计算代表次数,我正在尝试找出锦标赛的前 3 名获胜者。这就是我所拥有的:

    posts = Post.objects.filter(status=2, created_at__range=(tourn.start_date, tourn.end_date))

start = tourn.start_date - timedelta(days=1)
end = tourn.end_date + timedelta(days=1)
qn = connection.ops.quote_name
ctype = ContentType.objects.get_for_model(Post)

posts.extra(select={'score': """
SELECT SUM(vote)
FROM %s
WHERE content_type_id = %s
AND object_id = %s.id
AND voted_at > DATE(%s)
AND voted_at < DATE(%s)
""" % (qn(Vote._meta.db_table), ctype.id, qn(Post._meta.db_table), start, end)},
order_by=['-score'])

if tourn.limit_to_category:
posts.filter(category=tourn.category)

if len(posts) >= 1:
tourn_winners_1.append(posts[0].author)
resp += " 1: " + posts[0].author.username + "\n"

if len(posts) >= 2:
tourn_winners_2.append(posts[1].author)
resp += " 2: " + posts[1].author.username + "\n"

if len(posts) >= 3:
tourn_winners_3.append(posts[2].author)
resp += " 3: " + posts[2].author.username + "\n"

看起来很简单,但由于某种原因结果是错误的。

发出的查询如下:

SELECT "blog_post"."id", "blog_post"."title", "blog_post"."slug", "blog_post"."a
uthor_id", "blog_post"."creator_ip", "blog_post"."body", "blog_post"."tease", "b
log_post"."status", "blog_post"."allow_comments", "blog_post"."publish", "blog_p
ost"."created_at", "blog_post"."updated_at", "blog_post"."markup", "blog_post"."
tags", "blog_post"."category_id" FROM "blog_post" WHERE ("blog_post"."status" =
2 AND "blog_post"."created_at" BETWEEN 2008-12-21 00:00:00 and 2009-01-04 00:00
:00) ORDER BY "blog_post"."publish" DESC

看起来 posts.extra() 根本没有应用于查询......

最佳答案

我认为您需要将 posts 分配给 posts.extra() 的返回值:

posts = posts.extra(select={'score': """
SELECT SUM(vote)
FROM %s
WHERE content_type_id = %s
AND object_id = %s.id
AND voted_at > DATE(%s)
AND voted_at < DATE(%s)
""" % (qn(Vote._meta.db_table), ctype.id, qn(Post._meta.db_table), start, end)},
order_by=['-score'])

关于python - django-voting 的投票排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/544597/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com