#32398: Excluding on annotations doesn't apply null handling. ------------------------------------------+------------------------ Reporter: Gordon Wrigley | Owner: nobody Type: Uncategorized | Status: new Component: Uncategorized | Version: 3.1 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | ------------------------------------------+------------------------ I would generally expect `my_timestamp__year` to behave the same as `.annotate(my_timestamp_year=ExtractYear("my_timestamp"))` however I have noticed that when using exclude the former will account for null's but the later won't.
{{{ print(M.objects.exclude(closed_at__year=t.year).values("closed_at__year").query) SELECT EXTRACT('year' FROM "r_m"."closed_at" AT TIME ZONE 'Europe/London') FROM "r_m" WHERE NOT ( "r_m"."closed_at" BETWEEN 2021-01-01 00:00:00+00:00 AND 2021-12-31 23:59:59.999999+00:00 AND "r_m"."closed_at" IS NOT NULL ) }}} {{{ print(M.objects.annotate(year=ExtractYear("closed_at")).exclude(year=t.year).values("year").query) SELECT EXTRACT('year' FROM "r_m"."closed_at" AT TIME ZONE 'Europe/London') AS "year" FROM "r_m" WHERE NOT ( "r_m"."closed_at" BETWEEN 2021-01-01 00:00:00+00:00 AND 2021-12-31 23:59:59.999999+00:00 ) }}} Annotated aggregates like min and max also don't account for nulls which leads me to suspect this is a problem with annotations. I also tried wrapping the ExtractYear in an ExpressionWrapper with `output_field=IntegerField(null=True)` which didn't change anything. -- Ticket URL: <https://code.djangoproject.com/ticket/32398> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/050.5e8f35b975b4748ac2842e7a5460f083%40djangoproject.com.