Opened 4 years ago

Closed 4 years ago

#32021 closed New feature (duplicate)

Add support to update a JSONField with result from annotation

Reported by: Xavier Lesa Owned by: nobody
Component: Database layer (models, ORM) Version: 3.1
Severity: Normal Keywords: JSONField, Models, Annotate
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

I have a model with a JSONField and want to update in just one query like any other Field. Something like this:

    # one query update
    related_machinery = ActivityTracking.objects.filter(machinery=OuterRef('pk')).values('machinery')
    sub_total = related_machinery.annotate(Sum('measure_value')).values('measure_value__sum')
    avg_total = related_machinery.annotate(Avg('measure_value')).values('measure_value__avg')

    Machinery.objects.filter(id=machinery_id).update(
        measure_value=F('initial_measure_value') + sub_total,
        metrics=avg_total
    )

In example measure_value is a DecimalField and metrics is a JSONField. Also will be great if keys in JSONField was accessibles in update, like this:

    Machinery.objects.filter(id=instance.machinery_id).update(
        measure_value=F('initial_measure_value') + sub_total,
        metrics__average_measure_value=avg_total
    )

Change History (1)

comment:1 by Mariusz Felisiak, 4 years ago

Resolution: duplicate
Status: newclosed

Duplicate of #29112.

Note: See TracTickets for help on using tickets.
Back to Top