1 | In [1]: import django; from django.db.models import Count; from bugrep.models import *
|
---|
2 |
|
---|
3 | In [2]: Alfa.objects.all().delete; Bravo.objects.all().delete; Charlie.objects.all().delete()
|
---|
4 |
|
---|
5 | In [3]: b = Bravo.objects.create()
|
---|
6 |
|
---|
7 | In [4]: c = Charlie.objects.create(bravo=b)
|
---|
8 |
|
---|
9 | In [5]: qsboth = Charlie.objects.select_related('alfa').annotate(Count('bravo__charlie')); qsboth
|
---|
10 | Out[5]: []
|
---|
11 |
|
---|
12 | In [6]: qsboth_rev = Charlie.objects.annotate(Count('bravo__charlie')).select_related('alfa'); qsboth_rev
|
---|
13 | Out[6]: []
|
---|
14 |
|
---|
15 | In [7]: qsselrel = Charlie.objects.select_related('alfa'); qsselrel
|
---|
16 | Out[7]: [<Charlie: Charlie object>]
|
---|
17 |
|
---|
18 | In [8]: qsanno = Charlie.objects.annotate(Count('bravo__charlie')); qsanno
|
---|
19 | Out[8]: [<Charlie: Charlie object>]
|
---|
20 |
|
---|
21 | In [9]: str(qsboth.query) == str(qsboth_rev.query)
|
---|
22 | Out[9]: True
|
---|
23 |
|
---|
24 | In [10]: print(str(qsboth.query))
|
---|
25 | 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"
|
---|
26 |
|
---|
27 | In [11]: print(str(qsselrel.query))
|
---|
28 | 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" )
|
---|
29 |
|
---|
30 | In [12]: a = Alfa.objects.create()
|
---|
31 |
|
---|
32 | In [13]: Charlie.objects.update(alfa=a)
|
---|
33 | Out[13]: 1
|
---|
34 |
|
---|
35 | In [14]: qsboth = Charlie.objects.select_related('alfa').annotate(Count('bravo__charlie')); qsboth
|
---|
36 | Out[14]: [<Charlie: Charlie object>]
|
---|
37 |
|
---|
38 | In [15]: qsboth_rev = Charlie.objects.annotate(Count('bravo__charlie')).select_related('alfa'); qsboth_rev
|
---|
39 | Out[15]: [<Charlie: Charlie object>]
|
---|
40 |
|
---|
41 | In [16]: print(django.get_version())
|
---|
42 | 1.6b4
|
---|