gpt4 book ai didi

database - 在 Django 模型中将 NULL 视为 '0'

转载 作者:太空狗 更新时间:2023-10-30 01:50:05 25 4
gpt4 key购买 nike

我在我的 Django 应用程序中使用了以下代码:

pictures = gallery.picture_set.annotate( score=models.Sum( 'picturevote__value' ) ).order_by( '-score' )

有一张画廊表。他们每个人都有一些图片。当用户对图片投赞成票或反对票时,“图片投票”中会插入一个新行并将其连接到图片。然后我可以得到图片的总分。现在我想按分值对一个画廊的图片进行排序。但是由于表连接,当根本没有投票时,score 的值可能为 NULL。尽管如此,“NULL”的分数应被视为“0”。

有什么想法吗?

编辑:好的,这里有一些额外的解释:问题是上面示例中的聚合将 score 设置为 NULL。当我想显示分数时,我使用这样的东西:

score = self.picturevote_set.aggregate( models.Sum( 'value' ) )[ 'value__sum' ] or 0

然后聚合导致 NULL(如果没有 picturevote 行)或某个值。如果它是 NULL,则 or-expression 将其转换为可显示的整数值。但这只是解决了由 NULL 值引起的显示问题。当我想按照第一个代码示例中的 score 值对图片进行排序时,所有带有 NULL 的条目都放在有序结果集的末尾。首先是得分为正的图片,然后是负值的图片,然后是到目前为止没有投票赞成或反对的图片,因为它们的分数为 NULL。

我的问题是如何改变这种行为以使顺序正确。

最佳答案

从 Django 1.8 开始,有一个 Coalesce数据库功能。您的查询可能如下所示:

from django.db.models.functions import Coalesce    

score = self.picturevote_set.aggregate(Coalesce(models.Sum('value'), 0))

关于database - 在 Django 模型中将 NULL 视为 '0',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/553038/

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