Django 合并必须至少包含两个表达式
我正在使用Django和Python 3.7。我想编写一个联合表达式来帮助我编写一个更大的Django查询。我有Django 合并必须至少包含两个表达式,django,python-3.x,model,coalesce,Django,Python 3.x,Model,Coalesce,我正在使用Django和Python 3.7。我想编写一个联合表达式来帮助我编写一个更大的Django查询。我有 Coalesce( F("votes") - Subquery(relevant_hour_stats.values('votes_threshold')[:1]), output_field=models.FloatField())
Coalesce(
F("votes")
-
Subquery(relevant_hour_stats.values('votes_threshold')[:1]),
output_field=models.FloatField())
下面是上下文中的表达式
qset = (
ArticleStat.objects
.all()
.annotate(
shifted_article_create_hour=ExtractHour(ExpressionWrapper(
F('article__created_on')
+
timedelta(seconds=avg_fp_time_in_seconds),
output_field=models.DateTimeField()
))
)
.annotate(
votes_above_threshold=(
Coalesce(
F("votes")
-
Subquery(relevant_hour_stats.values('votes_threshold')[:1]),
output_field=models.FloatField())
),
)
.filter(
votes_above_threshold__gt=0,
)
)
但这导致了
Coalesce must take at least two expressions
抱怨线路问题
output_field=models.FloatField()
据我所知,我有两种表达方式。该错误还可能指什么?django术语中的“表达式”是django.db.models.expressions.Expression的实例
F('voates')
-表达式
子查询(…)
-表达式也是
但是expression+expression==组合表达式
因此F(…)-Subquery(…)
是一个单一的“复杂”表达式
您需要的是用于合并的第二个位置参数:
合并(
(F(…)-子查询(相关的_hour_stats.values('vows_threshold')[:1]),#第一个表达式
值(0.0),#第二个表达式
output_field=models.FloatField()
)
我认为子查询可能会导致NULL(而不是F()
),因此最好在合并中只包装子查询:
qset=(
物品统计
.all()
.注释(
移位文章创建小时=提取小时(
表达式包装器(
F(“文章创建时间”)+timedelta(秒=平均fp时间,以秒为单位),
输出\字段=models.DateTimeField()
)
),
)
.注释(
投票率高于阈值=(
#单个表达式F()-合并(…)用括号括起来
F(“投票”)-合并(
#2个表达式作为合并的参数:
子查询(相关的小时统计值('vows\u threshold')[:1]),
值(0.0),
output_field=models.FloatField(),
)
),
)
.过滤器(
票数高于阈值,票数gt=0,
)
)
这两个表达式是什么?