Opened 2 months ago

Last modified 6 weeks ago

#28616 assigned Bug

DISTINCT ON and update() does the wrong thing

Reported by: Daniel Keller Owned by: messfish
Component: Database layer (models, ORM) Version: 1.11
Severity: Normal Keywords:
Cc: felixxm Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

If I have a model like

from django.db import models
from django.utils import timezone

class Foo(models.Model):
    num = models.IntegerField(default=0)
    date = models.DateTimeField(default=timezone.now)
    flag = models.BooleanField(default=False)

and (with Postgresql) I do

Foo.objects.order_by('num', '-date').distinct('num').only('pk')

I get a query like

SELECT DISTINCT ON ("app_foo"."num") "app_foo"."id" AS Col1 FROM "app_foo" ORDER BY "app_foo"."num" ASC, "app_foo"."date" DESC; args=()

which returns the latest Foo for each num.

BUT, if I do

Foo.objects.order_by('num', '-date').distinct('num').update(flag=True)

then it executes

UPDATE "app_foo" SET "flag" = true; args=(True)

which updates everything.

I don't necessarily think that this behaviour should be supported, but it would be nice to at least get a NotImplementedError.

Change History (3)

comment:1 Changed 2 months ago by felixxm

Cc: felixxm added

comment:2 Changed 8 weeks ago by Tim Graham

Triage Stage: UnreviewedAccepted

comment:3 Changed 6 weeks ago by messfish

Owner: changed from nobody to messfish
Status: newassigned
Note: See TracTickets for help on using tickets.
Back to Top