magic-removal: Updated model tests for new syntax: 'basic', 'custom_managers' and 'custom_columns'

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2151 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Luke Plant 2006-01-29 00:23:52 +00:00
parent 02eeb8dd14
commit 2fd362f2d7
3 changed files with 97 additions and 65 deletions

View File

@ -11,8 +11,9 @@ class Article(models.Model):
pub_date = models.DateTimeField()
API_TESTS = """
# No articles are in the system yet.
>>> Article.objects.get_list()
>>> list(Article.objects)
[]
# Create an Article.
@ -37,52 +38,58 @@ datetime.datetime(2005, 7, 28, 0, 0)
>>> a.headline = 'Area woman programs in Python'
>>> a.save()
# get_list() displays all the articles in the database. Note that the article
# Listing objects displays all the articles in the database. Note that the article
# is represented by "<Article object>", because we haven't given the Article
# model a __repr__() method.
>>> Article.objects.get_list()
>>> list(Article.objects)
[<Article object>]
# Django provides a rich database lookup API that's entirely driven by
# keyword arguments.
>>> Article.objects.get_object(id__exact=1)
>>> Article.objects.get(id__exact=1)
<Article object>
>>> Article.objects.get_object(headline__startswith='Area woman')
>>> Article.objects.get(headline__startswith='Area woman')
<Article object>
>>> Article.objects.get_object(pub_date__year=2005)
>>> Article.objects.get(pub_date__year=2005)
<Article object>
>>> Article.objects.get_object(pub_date__year=2005, pub_date__month=7)
>>> Article.objects.get(pub_date__year=2005, pub_date__month=7)
<Article object>
>>> Article.objects.get_object(pub_date__year=2005, pub_date__month=7, pub_date__day=28)
>>> Article.objects.get(pub_date__year=2005, pub_date__month=7, pub_date__day=28)
<Article object>
>>> Article.objects.get_list(pub_date__year=2005)
# You can omit __exact if you want
>>> Article.objects.get(id=1)
<Article object>
>>> Article.objects.get(headline='Area woman programs in Python')
<Article object>
>>> list(Article.objects.filter(pub_date__year=2005))
[<Article object>]
>>> Article.objects.get_list(pub_date__year=2004)
>>> list(Article.objects.filter(pub_date__year=2004))
[]
>>> Article.objects.get_list(pub_date__year=2005, pub_date__month=7)
>>> list(Article.objects.filter(pub_date__year=2005, pub_date__month=7))
[<Article object>]
# Django raises an ArticleDoesNotExist exception for get_object()
>>> Article.objects.get_object(id__exact=2)
# Django raises an ArticleDoesNotExist exception for get()
>>> Article.objects.get(id__exact=2)
Traceback (most recent call last):
...
DoesNotExist: Article does not exist for {'id__exact': 2}
>>> Article.objects.get_object(pub_date__year=2005, pub_date__month=8)
>>> Article.objects.get(pub_date__year=2005, pub_date__month=8)
Traceback (most recent call last):
...
DoesNotExist: Article does not exist for ...
# Lookup by a primary key is the most common case, so Django provides a
# shortcut for primary-key exact lookups.
# The following is identical to articles.get_object(id__exact=1).
>>> Article.objects.get_object(pk=1)
# The following is identical to articles.get(id__exact=1).
>>> Article.objects.get(pk=1)
<Article object>
# Model instances of the same type and same ID are considered equal.
>>> a = Article.objects.get_object(pk=1)
>>> b = Article.objects.get_object(pk=1)
>>> a = Article.objects.get(pk=1)
>>> b = Article.objects.get(pk=1)
>>> a == b
True
@ -139,12 +146,12 @@ TypeError: 'foo' is an invalid keyword argument for this function
# give it.
>>> a7 = Article(headline='Article 7', pub_date=datetime(2005, 7, 31, 12, 30))
>>> a7.save()
>>> Article.objects.get_object(id__exact=7).pub_date
>>> Article.objects.get(id__exact=7).pub_date
datetime.datetime(2005, 7, 31, 12, 30)
>>> a8 = Article(headline='Article 8', pub_date=datetime(2005, 7, 31, 12, 30, 45))
>>> a8.save()
>>> Article.objects.get_object(id__exact=8).pub_date
>>> Article.objects.get(id__exact=8).pub_date
datetime.datetime(2005, 7, 31, 12, 30, 45)
>>> a8.id
8L
@ -160,40 +167,65 @@ datetime.datetime(2005, 7, 31, 12, 30, 45)
>>> a7 == a8
False
>>> a8 == Article.objects.get_object(id__exact=8)
>>> a8 == Article.objects.get(id__exact=8)
True
>>> a7 != a8
True
>>> Article.objects.get_object(id__exact=8) != Article.objects.get_object(id__exact=7)
>>> Article.objects.get(id__exact=8) != Article.objects.get(id__exact=7)
True
>>> Article.objects.get_object(id__exact=8) == Article.objects.get_object(id__exact=7)
>>> Article.objects.get(id__exact=8) == Article.objects.get(id__exact=7)
False
>>> Article.objects.get_pub_date_list('year')
[datetime.datetime(2005, 1, 1, 0, 0)]
>>> Article.objects.get_pub_date_list('month')
[datetime.datetime(2005, 7, 1, 0, 0)]
>>> Article.objects.get_pub_date_list('day')
[datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 31, 0, 0)]
>>> Article.objects.get_pub_date_list('day', order='ASC')
[datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 31, 0, 0)]
>>> Article.objects.get_pub_date_list('day', order='DESC')
[datetime.datetime(2005, 7, 31, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 28, 0, 0)]
## TODO - what should these be converted to?
# Try some bad arguments to __get_date_list
>>> Article.objects.get_pub_date_list('badarg')
Traceback (most recent call last):
...
AssertionError: 'kind' must be one of 'year', 'month' or 'day'.
>>> Article.objects.get_pub_date_list(order='ASC')
Traceback (most recent call last):
...
TypeError: __get_date_list() takes at least 3 non-keyword arguments (2 given)
##>>> Article.objects.get_pub_date_list('year')
##[datetime.datetime(2005, 1, 1, 0, 0)]
##>>> Article.objects.get_pub_date_list('month')
##[datetime.datetime(2005, 7, 1, 0, 0)]
##>>> Article.objects.get_pub_date_list('day')
##[datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 31, 0, 0)]
##>>> Article.objects.get_pub_date_list('day', order='ASC')
##[datetime.datetime(2005, 7, 28, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 31, 0, 0)]
##>>> Article.objects.get_pub_date_list('day', order='DESC')
##[datetime.datetime(2005, 7, 31, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 28, 0, 0)]
##
### Try some bad arguments to __get_date_list
##>>> Article.objects.get_pub_date_list('badarg')
##Traceback (most recent call last):
## ...
##AssertionError: 'kind' must be one of 'year', 'month' or 'day'.
##>>> Article.objects.get_pub_date_list(order='ASC')
##Traceback (most recent call last):
## ...
##TypeError: __get_date_list() takes at least 3 non-keyword arguments (2 given)
# You can combine queries with & and |
>>> s1 = Article.objects.filter(id__exact=1)
>>> s2 = Article.objects.filter(id__exact=2)
>>> tmp = [a.id for a in list(s1 | s2)]
>>> tmp.sort()
>>> tmp
[1L, 2L]
>>> list(s1 & s2)
[]
# You can get the number of objects like this:
>>> len(Article.objects.filter(id__exact=1))
1
# You can get items using index and slice notation:
>>> Article.objects[0]
<Article object>
>>> Article.objects[1:2]
[<Article object>, <Article object>]
>>> s3 = Article.objects.filter(id__exact=3)
>>> (s1 | s2 | s3)[::2]
[<Article object>, <Article object>]
# An Article instance doesn't have access to the "objects" attribute.
# That is only available as a class method.
>>> a7.objects.get_list()
>>> list(a7.objects)
Traceback (most recent call last):
...
AttributeError: Manager isn't accessible via Article instances
@ -204,10 +236,10 @@ Traceback (most recent call last):
AttributeError: Manager isn't accessible via Article instances
# Bulk delete test: How many objects before and after the delete?
>>> Article.objects.get_count()
>>> Article.objects.count()
8L
>>> Article.objects.delete(id__lte=4)
>>> Article.objects.get_count()
>>> Article.objects.count()
4L
>>> Article.objects.delete()
@ -216,7 +248,7 @@ Traceback (most recent call last):
TypeError: SAFETY MECHANISM: Specify DELETE_ALL=True if you actually want to delete all data.
>>> Article.objects.delete(DELETE_ALL=True)
>>> Article.objects.get_count()
>>> Article.objects.count()
0L
"""
@ -230,7 +262,7 @@ if building_docs or settings.DATABASE_ENGINE == 'postgresql':
# In PostgreSQL, microsecond-level precision is available.
>>> a9 = Article(headline='Article 9', pub_date=datetime(2005, 7, 31, 12, 30, 45, 180))
>>> a9.save()
>>> Article.objects.get_object(id__exact=9).pub_date
>>> Article.objects.get(id__exact=9).pub_date
datetime.datetime(2005, 7, 31, 12, 30, 45, 180)
"""
@ -240,7 +272,7 @@ if building_docs or settings.DATABASE_ENGINE == 'mysql':
# microsecond-level precision once the data is saved.
>>> a9 = Article(headline='Article 9', pub_date=datetime(2005, 7, 31, 12, 30, 45, 180))
>>> a9.save()
>>> Article.objects.get_object(id__exact=9).pub_date
>>> Article.objects.get(id__exact=9).pub_date
datetime.datetime(2005, 7, 31, 12, 30, 45)
"""
@ -249,7 +281,7 @@ API_TESTS += """
# You can manually specify the primary key when creating a new objet
>>> a101 = Article(id=101, headline='Article 101', pub_date=datetime(2005, 7, 31, 12, 30, 45))
>>> a101.save()
>>> a101 = Article.objects.get_object(pk=101)
>>> a101 = Article.objects.get(pk=101)
>>> a101.headline
'Article 101'
"""

View File

@ -23,21 +23,21 @@ API_TESTS = """
>>> p.id
1
>>> Person.objects.get_list()
>>> list(Person.objects)
[John Smith]
>>> Person.objects.get_list(first_name__exact='John')
>>> list(Person.objects.filter(first_name__exact='John'))
[John Smith]
>>> Person.objects.get_object(first_name__exact='John')
>>> Person.objects.get(first_name__exact='John')
John Smith
>>> Person.objects.get_list(firstname__exact='John')
>>> list(Person.objects.filter(firstname__exact='John'))
Traceback (most recent call last):
...
TypeError: Cannot resolve keyword 'firstname' into field
>>> p = Person.objects.get_object(last_name__exact='Smith')
>>> p = Person.objects.get(last_name__exact='Smith')
>>> p.first_name
'John'
>>> p.last_name

View File

@ -8,7 +8,7 @@ from django.db import models
class PersonManager(models.Manager):
def get_fun_people(self):
return self.get_list(fun__exact=True)
return list(self.filter(fun=True))
class Person(models.Model):
first_name = models.CharField(maxlength=30)
@ -22,9 +22,9 @@ class Person(models.Model):
# An example of providing a custom manager that isn't called "objects".
class PublishedBookManager(models.Manager):
def get_list(self, **kwargs):
kwargs['is_published__exact'] = True
return models.Manager.get_list(self, **kwargs)
def __init__(self):
super(PublishedBookManager, self).__init__()
self._set_core_filter(is_published__exact=True)
class Book(models.Model):
title = models.CharField(maxlength=50)
@ -38,9 +38,9 @@ class Book(models.Model):
# An example of providing multiple custom managers.
class FastCarManager(models.Manager):
def get_list(self, **kwargs):
kwargs['top_speed__gt'] = 150
return models.Manager.get_list(self, **kwargs)
def __init__(self):
super(FastCarManager, self).__init__()
self._set_core_filter(top_speed__gt=150)
class Car(models.Model):
name = models.CharField(maxlength=10)
@ -72,20 +72,20 @@ Traceback (most recent call last):
...
AttributeError: type object 'Book' has no attribute 'objects'
>>> Book.published_objects.get_list()
>>> list(Book.published_objects)
[How to program]
>>> c1 = Car(name='Corvette', mileage=21, top_speed=180)
>>> c1.save()
>>> c2 = Car(name='Neon', mileage=31, top_speed=100)
>>> c2.save()
>>> Car.cars.get_list(order_by=('name',))
>>> list(Car.cars.order_by('name'))
[Corvette, Neon]
>>> Car.fast_cars.get_list()
>>> list(Car.fast_cars)
[Corvette]
# Each model class gets a "_default_manager" attribute, which is a reference
# to the first manager defined in the class. In this case, it's "cars".
>>> Car._default_manager.get_list(order_by=('name',))
>>> list(Car._default_manager.order_by('name'))
[Corvette, Neon]
"""