diff options
Diffstat (limited to 'tests/modeltests/custom_methods')
| -rw-r--r-- | tests/modeltests/custom_methods/__init__.py | 0 | ||||
| -rw-r--r-- | tests/modeltests/custom_methods/models.py | 58 |
2 files changed, 58 insertions, 0 deletions
diff --git a/tests/modeltests/custom_methods/__init__.py b/tests/modeltests/custom_methods/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/modeltests/custom_methods/__init__.py diff --git a/tests/modeltests/custom_methods/models.py b/tests/modeltests/custom_methods/models.py new file mode 100644 index 0000000000..3fdefca6bf --- /dev/null +++ b/tests/modeltests/custom_methods/models.py @@ -0,0 +1,58 @@ +""" +3. Giving models custom methods and custom managers + +Any method you add to a model will be available to instances. +""" + +from django.db import models +import datetime + +class Article(models.Model): + headline = models.CharField(maxlength=100) + pub_date = models.DateField() + + def __repr__(self): + return self.headline + + def was_published_today(self): + return self.pub_date == datetime.date.today() + + def get_articles_from_same_day_1(self): + return Article.objects.filter(pub_date=self.pub_date).exclude(id=self.id) + + def get_articles_from_same_day_2(self): + """ + Verbose version of get_articles_from_same_day_1, which does a custom + database query for the sake of demonstration. + """ + from django.db import connection + cursor = connection.cursor() + cursor.execute(""" + SELECT id, headline, pub_date + FROM custom_methods_article + WHERE pub_date = %s + AND id != %s""", [str(self.pub_date), self.id]) + # The asterisk in "(*row)" tells Python to expand the list into + # positional arguments to Article(). + return [self.__class__(*row) for row in cursor.fetchall()] + +API_TESTS = """ +# Create a couple of Articles. +>>> from datetime import date +>>> a = Article(id=None, headline='Area man programs in Python', pub_date=date(2005, 7, 27)) +>>> a.save() +>>> b = Article(id=None, headline='Beatles reunite', pub_date=date(2005, 7, 27)) +>>> b.save() + +# Test the custom methods. +>>> a.was_published_today() +False +>>> a.get_articles_from_same_day_1() +[Beatles reunite] +>>> a.get_articles_from_same_day_2() +[Beatles reunite] +>>> b.get_articles_from_same_day_1() +[Area man programs in Python] +>>> b.get_articles_from_same_day_2() +[Area man programs in Python] +""" |
