没有时区的Django查询注释

问题描述 投票:0回答:1

我正在尝试使用Django的查询对象编写以下查询:

all_proposals2 = Proposal.objects.raw(
"select *, vote_score/extract('epoch' from age(created)) as display_rank from proposals_proposal")

这是我想出的:

all_proposals = Proposal.objects.annotate(
    display_rank=F('vote_score') / Extract(Func(F('created'), function='AGE'), 'epoch'),
)

但是它生成此查询:

SELECT
   "proposals_proposal"."id",
   ...
   ("proposals_proposal"."vote_score" / 
      EXTRACT('epoch' FROM AGE("proposals_proposal"."created") AT TIME ZONE 'America/Los_Angeles')) AS "display_rank" 
FROM
   "proposals_proposal" 
ORDER BY
   "proposals_proposal"."created" ASC

这不是有效的查询。 Postgres给出此错误:

HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

但是非常正确,只不过它在AT TIME ZONE 'America/Los_Angeles'函数调用后附加了额外的AGE()。如何更改查询,使其不具有该时区规范?

django postgresql timezone annotate
1个回答
0
投票
[浏览了应用此时区规则的source code for the Extract function之后,我意识到我将不得不用通用的Extract编写此Extract调用。

Func

© www.soinside.com 2019 - 2024. All rights reserved.