| | 1 | # coding: utf-8 |
| | 2 | """ |
| | 3 | 1. Tests for ticket #13935 (QuerySet .dates() method should span relationships) |
| | 4 | |
| | 5 | There are two models, one-to-many, and .dates() on second one with reference to first one field must succeed |
| | 6 | """ |
| | 7 | from django.db import models, DEFAULT_DB_ALIAS |
| | 8 | |
| | 9 | class Article(models.Model): |
| | 10 | title = models.CharField(max_length=100) |
| | 11 | pub_date = models.DateField() |
| | 12 | pub_date_time = models.DateTimeField() |
| | 13 | |
| | 14 | def __unicode__(self): |
| | 15 | return self.title |
| | 16 | |
| | 17 | class Comment(models.Model): |
| | 18 | article = models.ForeignKey(Article) |
| | 19 | text = models.TextField() |
| | 20 | pub_date = models.DateField() |
| | 21 | pub_date_time = models.DateTimeField() |
| | 22 | |
| | 23 | def __unicode__(self): |
| | 24 | return 'Comment to %s (%s)' % (self.article.title, self.pub_date_time) |
| | 25 | |
| | 26 | |
| | 27 | __test__ = {'API_TESTS': """ |
| | 28 | # first, some data |
| | 29 | >>> from datetime import datetime |
| | 30 | >>> a1 = Article(title="First one", pub_date=datetime(2005, 7, 28), pub_date_time=datetime(2005, 7, 28)) |
| | 31 | >>> a1.save() |
| | 32 | >>> a2 = Article(title="Another one", pub_date=datetime(2010, 7, 28), pub_date_time=datetime(2010, 7, 28)) |
| | 33 | >>> a2.save() |
| | 34 | >>> a3 = Article(title="Third one, in the first day", pub_date=datetime(2005, 7, 28), pub_date_time=datetime(2005, 7, 28)) |
| | 35 | >>> a3.save() |
| | 36 | |
| | 37 | # are we sane? |
| | 38 | >>> Article.objects.all() |
| | 39 | [<Article: First one>, <Article: Another one>, <Article: Third one, in the first day>] |
| | 40 | |
| | 41 | # awesome! some comments |
| | 42 | >>> c1 = Comment(text="Im the HULK!", article=a1, pub_date=datetime(2005, 7, 28), pub_date_time=datetime(2005, 7, 28)) |
| | 43 | >>> c1.save() |
| | 44 | >>> c2 = Comment(text="HULK SMASH!", article=a1, pub_date=datetime(2005, 7, 29), pub_date_time=datetime(2005, 7, 29)) |
| | 45 | >>> c2.save() |
| | 46 | >>> c3 = Comment(text="LMAO", article=a2, pub_date=datetime(2010, 7, 28), pub_date_time=datetime(2010, 7, 28)) |
| | 47 | >>> c3.save() |
| | 48 | >>> c4 = Comment(text="+1", article=a3, pub_date=datetime(2005, 8, 29), pub_date_time=datetime(2005, 8, 29)) |
| | 49 | >>> c4.save() |
| | 50 | |
| | 51 | # good? |
| | 52 | >>> Comment.objects.all() |
| | 53 | [<Comment: Comment to First one (2005-07-28 00:00:00)>, <Comment: Comment to First one (2005-07-29 00:00:00)>, <Comment: Comment to Another one (2010-07-28 00:00:00)>, <Comment: Comment to Third one, in the first day (2005-08-29 00:00:00)>] |
| | 54 | |
| | 55 | # okay, we are ready now. let's go straight to the point |
| | 56 | >>> Comment.objects.dates('pub_date', 'year') |
| | 57 | [datetime.datetime(2005, 1, 1, 0, 0), datetime.datetime(2010, 1, 1, 0, 0)] |
| | 58 | >>> Comment.objects.dates('pub_date', 'month') |
| | 59 | [datetime.datetime(2005, 7, 1, 0, 0), datetime.datetime(2005, 8, 1, 0, 0), datetime.datetime(2010, 7, 1, 0, 0)] |
| | 60 | >>> Comment.objects.dates('pub_date', 'day') |
| | 61 | [datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 8, 29, 0, 0), datetime.datetime(2010, 7, 28, 0, 0)] |
| | 62 | |
| | 63 | # that was expected. now, something not so easy? |
| | 64 | >>> Comment.objects.dates('article__pub_date', 'year') |
| | 65 | [datetime.datetime(2005, 1, 1, 0, 0), datetime.datetime(2010, 1, 1, 0, 0)] |
| | 66 | >>> Comment.objects.dates('article__pub_date', 'month') |
| | 67 | [datetime.datetime(2005, 7, 1, 0, 0), datetime.datetime(2010, 7, 1, 0, 0)] |
| | 68 | >>> Comment.objects.dates('article__pub_date', 'day') |
| | 69 | [datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2010, 7, 28, 0, 0)] |
| | 70 | """} |
| | 71 | |