﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
34464	QuerySet.count() regression on Django 4.2 with values() and annotate()	Ian Cubitt	Simon Charette	"After upgrading to Django 4.2 we noticed incorrect results on some queries we use in reporting.

We are using PostgreSQL as our database.
Using psycopg2 or the new psycopg 3 support does not change the result.

Sample model:

{{{
#!python
class SampleModel(models.Model):
    sample_datetime_field = models.DateTimeField()
}}}

Example code to reproduce the issue:

{{{
#!python
from bug_test.models import SampleModel
from django.db.models import Count
from django.db.models.functions import TruncHour
from django.utils import timezone

# Prepopulate 10 hours of sample data

now = timezone.now()

for i in range(10):
    field_value = now - timedelta(hours=1 + i)

    for i in range(5):
        SampleModel.objects.create(sample_datetime_field=field_value)

# Affected query example

qs = SampleModel.objects.all().annotate(hour=TruncHour('sample_datetime_field')).\
    values('hour').annotate(hour_count=Count('*')).filter(hour_count__gte=5)

print(f""Count: {qs.count()}"")  # Incorrectly returns 0. Returns correct result on Django 4.1
print(f""Len: {len(qs)}"")  # Returns correct result of 10
}}}"	Bug	closed	Database layer (models, ORM)	4.2	Release blocker	fixed	postgresql	charette	Ready for checkin	1	0	0	0	0	0
