postgresql 如何合并两个JSONField字段

oo7oh9g9  于 2023-03-17  发布在  PostgreSQL
关注(0)|答案(1)|浏览(201)

Postgres允许将两个JSONB字段合并/连接为一个。引用相关的Postgres文档:
jsonb || jsonb → jsonb-连接两个jsonb值。
据我所知,Django ORM没有为这种类型的连接提供操作符。django.db.models.expressions.Combinable没有||操作符。
django.contrib.postgres.search.SearchQueryCombinable有一个||运算符,但是这个类似乎不适用于这里。

rsaldnfx

rsaldnfx1#

由于表达式通常是mixin类Combinable,我们可以在F字段上使用_combine方法,并将操作符自定义为||ExpressionWrapper是必需的,因为Django无法推断自定义组合的output_field

from django.db import models
from django.db.models import ExpressionWrapper, F

class MyModel(models.Model):
    jsonfield1 = models.JSONField()
    jsonfield2 = models.JSONField()

MyModel.objects.annotate(
    concatenated_jsonfields=ExpressionWrapper(
        F("jsonfield1")._combine(F("jsonfield2"), "||", reversed=False),
        output_field=models.JSONField(),
    )
)

相关问题