【发布时间】:2010-10-07 20:55:02
【问题描述】:
我在我的 Django 应用程序中使用以下代码:
pictures = gallery.picture_set.annotate( score=models.Sum( 'picturevote__value' ) ).order_by( '-score' )
有一张画廊桌。他们每个人都有一些图片。当用户对图片投赞成票或反对票时,将插入“picturevote”中的新行并将其连接到图片。然后我可以得到图片的总分。 现在我想按它们的分值排序一个画廊的图片。但是由于表连接,当根本没有投票时,得分的值可能为 NULL。尽管如此,'NULL' 的分数应被视为'0'。
有什么想法吗?
编辑:
好的,这里有一些额外的解释:
问题是上面示例中的聚合将score 设置为NULL。当我想显示分数时,我使用这样的东西:
score = self.picturevote_set.aggregate( models.Sum( 'value' ) )[ 'value__sum' ] or 0
然后聚合导致 NULL(如果没有图片投票行)或某个值。如果它为 NULL,则 or 表达式将其转换为可显示的整数值。
但这仅解决了由 NULL 值引起的显示问题。
当我想按照第一个代码示例中的 score 值对图片进行排序时,所有带有 NULL 的条目都放在有序结果集的末尾。首先是评分为正的图片,然后是评分为负的图片,然后是目前未投票赞成或反对的图片,因为它们的值为 NULL,为 score。
我的问题是如何改变这种行为以使顺序正确。
【问题讨论】:
-
您能否更清楚地说明问题所在?如果没有投票,你会从上面的代码中得到错误吗?什么错误?