Django

Code

Ticket #4997: models.py

File models.py, 1.4 kB (added by David Cramer <dcramer@gmail.com>, 3 years ago)

tests/regressiontests/group_by/models.py

Line 
1 from django.db import models
2
3 class Poll(models.Model):
4     question = models.CharField(maxlength=200)
5
6     def __str__(self):
7         return "Q: %s " % self.question
8
9     class Meta:
10         db_table = 'poll'
11
12 class Choice(models.Model):
13     poll = models.ForeignKey(Poll, related_name="choices")
14     choice = models.CharField(maxlength=200)
15
16     def __str__(self):
17         return "Choice: %s in poll %s" % (self.choice, self.poll)
18
19     class Meta:
20         db_table = 'poll_choices'
21
22 __test__ = {'API_TESTS':"""
23 # Regression test for the use of .group_by() on querysets.
24 # Set up some initial polls and choices
25 >>> p1 = Poll(question='Why?')
26 >>> p1.save()
27 >>> c1 = Choice(poll=p1, choice='Because.')
28 >>> c1.save()
29 >>> c2 = Choice(poll=p1, choice='Why Not?')
30 >>> c2.save()
31 >>> c3 = Choice(poll=p1, choice='Group by is useful.')
32 >>> c3.save()
33
34 # GROUP BY on poll_id should return 1 result
35 >>> Choice.objects.all().group_by('poll').count()
36 1
37
38 # .group_by() does not support DESC (only MySQL does) so it fails
39 # because -poll is an invalid column name
40 >>> Choice.objects.all().group_by('-poll')
41 Traceback (most recent call last):
42 ...
43 OperationalError: no such column: poll_choices.-poll
44
45 # GROUP BY on poll_id with a COUNT() should return the number of choices
46 >>> Poll.objects.all().extra(select={'choice_count': 'COUNT(`poll_choices`.`id`)'}, tables=['`poll_choices`'], where=['`poll_choices`.`poll_id` = `poll`.`id`']).group_by('id').get().choice_count
47 3
48 """}