【问题标题】:in django ,how to sum a int field and two float field in jsonb using postgresql在 django 中,如何使用 postgresql 对 jsonb 中的一个 int 字段和两个 float 字段求和
【发布时间】:2021-05-24 09:03:22
【问题描述】:

我有一个这样的模型:

class Priority(models.Model):
    base = models.FloatField(default=0)
    job = models.JSONField()
    users = models.JSONField()

jobusers 都相似。

like job = {'a':1,'b':2}, user = {'c':3,'d':4}

我想得到总和(base + job__a + users__c)

如何编写过滤语句,

原始 sql 也很好。

谢谢

【问题讨论】:

    标签: django postgresql jsonb


    【解决方案1】:

    你应该完成这个(更新):

        queryset = Priority.objects.annotate(
            a=Coalesce(
                Cast(KeyTextTransform('a', 'job'), output_field=FloatField()),
                Cast(V(0.0), output_field=FloatField())
            ),
            c=Cast(KeyTextTransform('c', 'users'), output_field=FloatField()),
        ).annotate(
            sum=Sum(
                F('base') + F('a') + F('c'), output_field=FloatField() 
            )
        )
    
        for item in queryset:
            print(item.sum)
    

    【讨论】:

    • 谢谢,如果key(a)不在json字段(job)中,我想给一个默认值(0.0.),如何处理?
    • 更新了答案
    猜你喜欢
    • 2016-05-09
    • 2019-07-26
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多