In [1]: import django; from django.db.models import Count; from bugrep.models import *

In [2]: Alfa.objects.all().delete; Bravo.objects.all().delete; Charlie.objects.all().delete()

In [3]: b = Bravo.objects.create()

In [4]: c = Charlie.objects.create(bravo=b)

In [5]: qsboth = Charlie.objects.select_related('alfa').annotate(Count('bravo__charlie')); qsboth
Out[5]: []

In [6]: qsboth_rev = Charlie.objects.annotate(Count('bravo__charlie')).select_related('alfa'); qsboth_rev
Out[6]: []

In [7]: qsselrel = Charlie.objects.select_related('alfa'); qsselrel
Out[7]: [<Charlie: Charlie object>]

In [8]: qsanno = Charlie.objects.annotate(Count('bravo__charlie')); qsanno
Out[8]: [<Charlie: Charlie object>]

In [9]: str(qsboth.query) == str(qsboth_rev.query)
Out[9]: True

In [10]: print(str(qsboth.query))
SELECT "bugrep_charlie"."id", "bugrep_charlie"."alfa_id", "bugrep_charlie"."bravo_id", COUNT(T4."id") AS "bravo__charlie__count", "bugrep_alfa"."id" FROM "bugrep_charlie" INNER JOIN "bugrep_alfa" ON ( "bugrep_charlie"."alfa_id" = "bugrep_alfa"."id" ) LEFT OUTER JOIN "bugrep_bravo" ON ( "bugrep_charlie"."bravo_id" = "bugrep_bravo"."id" ) LEFT OUTER JOIN "bugrep_charlie" T4 ON ( "bugrep_bravo"."id" = T4."bravo_id" ) GROUP BY "bugrep_charlie"."id", "bugrep_charlie"."alfa_id", "bugrep_charlie"."bravo_id", "bugrep_alfa"."id"

In [11]: print(str(qsselrel.query))
SELECT "bugrep_charlie"."id", "bugrep_charlie"."alfa_id", "bugrep_charlie"."bravo_id", "bugrep_alfa"."id" FROM "bugrep_charlie" LEFT OUTER JOIN "bugrep_alfa" ON ( "bugrep_charlie"."alfa_id" = "bugrep_alfa"."id" )

In [12]: a = Alfa.objects.create()

In [13]: Charlie.objects.update(alfa=a)
Out[13]: 1

In [14]: qsboth = Charlie.objects.select_related('alfa').annotate(Count('bravo__charlie')); qsboth
Out[14]: [<Charlie: Charlie object>]

In [15]: qsboth_rev = Charlie.objects.annotate(Count('bravo__charlie')).select_related('alfa'); qsboth_rev
Out[15]: [<Charlie: Charlie object>]

In [16]: print(django.get_version())
1.6b4
