Code

Ticket #4997: models.py

File models.py, 1.4 KB (added by David Cramer <dcramer@…>, 7 years ago)

tests/regressiontests/group_by/models.py

Line 
1from django.db import models
2
3class 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
12class 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()
361
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')
41Traceback (most recent call last):
42...
43OperationalError: 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
473
48"""}
49