Repository navigation
1.14.4 — correctness hotfix
Correctness hotfix release. Highlights:
Changed
ManyToManyField(through_fields=...)now reads Django's(owner_column, target_column)order — declarations written against the previous(forward_key, backward_key)reading must swap the two elements (the explicitforward_key=/backward_key=kwargs are unchanged).- Related-manager bulk writes are unscoped:
parent.children.update(...)/.delete()reach every related row even under a soft-deleteMeta.manager; reads keep the manager scope.
Fixed
- Oracle: zero-fraction datetime binds compared unequal to stored values, so
col >= :midnightdropped exact-midnight rows — such values now bind as DATE. - Datetime write paths:
DatetimeField.to_dbwidens bare dates to midnight datetimes (plain-attributesave(),update(),bulk_update()no longer store date-only text); the__datelookup narrows its value to a date. - m2m cleanup is atomic on non-cascading dialects (SQL Server): a failed row delete no longer strips the surviving rows' join links.
- SQL Server
bulk_create: ids return viaOUTPUT ... INTO(works with triggers, error 334 gone) in arrival order (correct under negative IDENTITY increments). bulk_get_or_create/bulk_update_or_createaccept a mix of explicit and auto pks.- PostgreSQL
execute_many: numeric mixes widen to NUMERIC (no precision loss above 2^53); naive/aware datetime and str/UUID mixes are accepted. - Plus the fifteen correctness fixes from the full-codebase review (#18): ZoneInfo-aware binds, batch parameter-type unification, the sync-fast-path pool deadlock,
get_or_createconnection binding and root-filter inheritance, decode-plan snapshots, grouped-projection order_by annotations, and manager-scoped lazy relation reads.
Full details in CHANGELOG.md.