~ubuntu-branches/ubuntu/quantal/python-django/quantal

« back to all changes in this revision

Viewing changes to tests/modeltests/custom_methods/models.py

  • Committer: Bazaar Package Importer
  • Author(s): Chris Lamb
  • Date: 2009-07-29 11:26:28 UTC
  • mfrom: (1.1.8 upstream) (4.1.5 sid)
  • Revision ID: james.westby@ubuntu.com-20090729112628-pg09ino8sz0sj21t
Tags: 1.1-1
* New upstream release.
* Merge from experimental:
  - Ship FastCGI initscript and /etc/default file in python-django's examples
    directory (Closes: #538863)
  - Drop "05_10539-sphinx06-compatibility.diff"; it has been applied
    upstream.
  - Bump Standards-Version to 3.8.2.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
3. Giving models custom methods
 
3
 
 
4
Any method you add to a model will be available to instances.
 
5
"""
 
6
 
 
7
from django.db import models
 
8
import datetime
 
9
 
 
10
class Article(models.Model):
 
11
    headline = models.CharField(max_length=100)
 
12
    pub_date = models.DateField()
 
13
 
 
14
    def __unicode__(self):
 
15
        return self.headline
 
16
 
 
17
    def was_published_today(self):
 
18
        return self.pub_date == datetime.date.today()
 
19
 
 
20
    def articles_from_same_day_1(self):
 
21
        return Article.objects.filter(pub_date=self.pub_date).exclude(id=self.id)
 
22
 
 
23
    def articles_from_same_day_2(self):
 
24
        """
 
25
        Verbose version of get_articles_from_same_day_1, which does a custom
 
26
        database query for the sake of demonstration.
 
27
        """
 
28
        from django.db import connection
 
29
        cursor = connection.cursor()
 
30
        cursor.execute("""
 
31
            SELECT id, headline, pub_date
 
32
            FROM custom_methods_article
 
33
            WHERE pub_date = %s
 
34
                AND id != %s""", [connection.ops.value_to_db_date(self.pub_date),
 
35
                                  self.id])
 
36
        # The asterisk in "(*row)" tells Python to expand the list into
 
37
        # positional arguments to Article().
 
38
        return [self.__class__(*row) for row in cursor.fetchall()]
 
39
 
 
40
__test__ = {'API_TESTS':"""
 
41
# Create a couple of Articles.
 
42
>>> from datetime import date
 
43
>>> a = Article(id=None, headline='Area man programs in Python', pub_date=date(2005, 7, 27))
 
44
>>> a.save()
 
45
>>> b = Article(id=None, headline='Beatles reunite', pub_date=date(2005, 7, 27))
 
46
>>> b.save()
 
47
 
 
48
# Test the custom methods.
 
49
>>> a.was_published_today()
 
50
False
 
51
>>> a.articles_from_same_day_1()
 
52
[<Article: Beatles reunite>]
 
53
>>> a.articles_from_same_day_2()
 
54
[<Article: Beatles reunite>]
 
55
>>> b.articles_from_same_day_1()
 
56
[<Article: Area man programs in Python>]
 
57
>>> b.articles_from_same_day_2()
 
58
[<Article: Area man programs in Python>]
 
59
"""}