Opened 4 years ago

Last modified 4 years ago

#32684 closed Bug

Annotate query with Subquery with None value cannot be reliably filtered (or excluded) — at Initial Version

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

Description

Let's say I have the following query

        last_location = Subquery(PersonLocation.objects.filter(
            person=OuterRef('id'), departure_date=None).order_by('-arrival_date').values('location')[:1])

        persons1 = Person.objects_with_inactive.annotate(current_location=last_location)

Where PersonLocation is the table connecting the Person to a Location (to keep track of the location history of a person).

And further in the code I do:

        persons2 = persons1.exclude(current_location=location.id)

This will always return an empty queryset. Even if in persons1 there are person objects that have current_location = None annotated.
This is very counter-intuitive, right?

I'm also not aware of a way to fix this. I tried persons1.filter(~Q(current_location=location.id)), but the result is the same.

Change History (0)

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