首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >django-voting中的投票排序问题

django-voting中的投票排序问题
EN

Stack Overflow用户
提问于 2009-02-13 03:25:23
回答 1查看 770关注 0票数 1

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

还有Tourn,它是开始日期和结束日期。在巡回赛开始和结束之间制作的帖子被提交到该锦标赛。

为了便于计算,我试图找出锦标赛的前三名获胜者。这就是我所拥有的:

代码语言:javascript
运行
复制
    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"

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

所进行的查询如下:

代码语言:javascript
运行
复制
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()根本没有被应用到查询中...

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-02-13 21:34:48

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

代码语言:javascript
运行
复制
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'])
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/544597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档