Opened 3 weeks ago

Last modified 4 days ago

#37372 assigned Bug

Handling of null values in __in lookups is inconsistent — at Version 4

Reported by: Annabelle Wiegart Owned by: Annabelle Wiegart
Component: Database layer (models, ORM) Version: 6.1
Severity: Normal Keywords: null, in, lookup
Cc: Simon Charette Triage Stage: Accepted
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: yes
Easy pickings: no UI/UX: no

Description (last modified by Annabelle Wiegart)

When the right-hand side of an __in lookup contains None, several problems are surfaced.

  1. The resulting querysets differ from the same query being constructed with Q queries combined with OR.
  2. .filter() and .exclude() produce non-complementary querysets.
  3. Objects with None values are discarded.

This happens when testing against a single table as well when spanning relationships.
The problems are related to the interference between two tickets:
#20024 was created 14 years ago. The suggested change made sense back then, but conflicts with the fix for #31667 implemented in the meantime. This led to the fix for #20024 being ineffective, and the targeting of null values in __in lookups being made impossible.

DryORM fiddle: ​https://dryorm.xterm.info/in-lookups-with-none

Change History (4)

comment:1 by Simon Charette, 3 weeks ago

Cc: Simon Charette added
Component: Uncategorized → Database layer (models, ORM)
Triage Stage: Unreviewed → Accepted
Type: Uncategorized → Bug

Annabelle and I worked on this project during the Django on the Med 2026 sprint.

Last edited 3 weeks ago by Lily (previous) (diff)

comment:2 by Annabelle Wiegart, 3 weeks ago

Description: modified (diff)

comment:3 by Annabelle Wiegart, 3 weeks ago

Has patch: set

comment:4 by Annabelle Wiegart, 2 weeks ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top