1
0
mirror of https://github.com/django/django.git synced 2025-07-05 10:19:20 +00:00

magic-removal: Added an 'ordering' option on a model in order to make test deterministic across databases, and updated details of tests accordingly (fixes 7 tests on Postgres).

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2610 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Luke Plant 2006-04-04 19:40:00 +00:00
parent f7e00af2c3
commit df26d4bcc4

View File

@ -22,6 +22,8 @@ class Article(models.Model):
def __repr__(self): def __repr__(self):
return self.headline return self.headline
class Meta:
ordering = ('headline',)
API_TESTS = """ API_TESTS = """
# Create a few Reporters. # Create a few Reporters.
@ -60,14 +62,14 @@ John's second story
>>> new_article2.reporter.id >>> new_article2.reporter.id
1 1
>>> r.article_set.all() >>> r.article_set.all()
[This is a test, John's second story, Paul's story] [John's second story, Paul's story, This is a test]
# Add the same article to a different article set - check that it moves. # Add the same article to a different article set - check that it moves.
>>> r2.article_set.add(new_article2) >>> r2.article_set.add(new_article2)
>>> new_article2.reporter.id >>> new_article2.reporter.id
2 2
>>> r.article_set.all() >>> r.article_set.all()
[This is a test, John's second story] [John's second story, This is a test]
>>> r2.article_set.all() >>> r2.article_set.all()
[Paul's story] [Paul's story]
@ -79,7 +81,7 @@ John Smith
>>> new_article2.reporter.id >>> new_article2.reporter.id
1 1
>>> r.article_set.all() >>> r.article_set.all()
[This is a test, John's second story, Paul's story] [John's second story, Paul's story, This is a test]
>>> r2.article_set.all() >>> r2.article_set.all()
[] []
@ -94,7 +96,7 @@ John Smith
# ForeignKey cannot be null, existing members of the set must remain # ForeignKey cannot be null, existing members of the set must remain
>>> r.article_set = [new_article] >>> r.article_set = [new_article]
>>> r.article_set.all() >>> r.article_set.all()
[This is a test, John's second story] [John's second story, This is a test]
>>> r2.article_set.all() >>> r2.article_set.all()
[Paul's story] [Paul's story]
@ -105,8 +107,8 @@ False
False False
# Reporter objects have access to their related Article objects. # Reporter objects have access to their related Article objects.
>>> r.article_set.order_by('pub_date') >>> r.article_set.all()
[This is a test, John's second story] [John's second story, This is a test]
>>> r.article_set.filter(headline__startswith='This') >>> r.article_set.filter(headline__startswith='This')
[This is a test] [This is a test]
@ -131,12 +133,12 @@ False
# Use double underscores to separate relationships. # Use double underscores to separate relationships.
# This works as many levels deep as you want. There's no limit. # This works as many levels deep as you want. There's no limit.
# Find all Articles for any Reporter whose first name is "John". # Find all Articles for any Reporter whose first name is "John".
>>> Article.objects.filter(reporter__first_name__exact='John').order_by('pub_date') >>> Article.objects.filter(reporter__first_name__exact='John')
[This is a test, John's second story] [John's second story, This is a test]
# Query twice over the related field. # Query twice over the related field.
>>> Article.objects.filter(reporter__first_name__exact='John', reporter__last_name__exact='Smith') >>> Article.objects.filter(reporter__first_name__exact='John', reporter__last_name__exact='Smith')
[This is a test, John's second story] [John's second story, This is a test]
# The underlying query only makes one join when a related table is referenced twice. # The underlying query only makes one join when a related table is referenced twice.
>>> query = Article.objects.filter(reporter__first_name__exact='John', reporter__last_name__exact='Smith') >>> query = Article.objects.filter(reporter__first_name__exact='John', reporter__last_name__exact='Smith')
@ -146,13 +148,13 @@ False
# The automatically joined table has a predictable name. # The automatically joined table has a predictable name.
>>> Article.objects.filter(reporter__first_name__exact='John').extra(where=["many_to_one_article__reporter.last_name='Smith'"]) >>> Article.objects.filter(reporter__first_name__exact='John').extra(where=["many_to_one_article__reporter.last_name='Smith'"])
[This is a test, John's second story] [John's second story, This is a test]
# Find all Articles for the Reporter whose ID is 1. # Find all Articles for the Reporter whose ID is 1.
>>> Article.objects.filter(reporter__id__exact=1).order_by('pub_date') >>> Article.objects.filter(reporter__id__exact=1)
[This is a test, John's second story] [John's second story, This is a test]
>>> Article.objects.filter(reporter__pk=1).order_by('pub_date') >>> Article.objects.filter(reporter__pk=1)
[This is a test, John's second story] [John's second story, This is a test]
# You need two underscores between "reporter" and "id" -- not one. # You need two underscores between "reporter" and "id" -- not one.
>>> Article.objects.filter(reporter_id__exact=1) >>> Article.objects.filter(reporter_id__exact=1)
@ -167,8 +169,8 @@ Traceback (most recent call last):
TypeError: Cannot resolve keyword 'reporter_id' into field TypeError: Cannot resolve keyword 'reporter_id' into field
# "pk" shortcut syntax works in a related context, too. # "pk" shortcut syntax works in a related context, too.
>>> Article.objects.filter(reporter__pk=1).order_by('pub_date') >>> Article.objects.filter(reporter__pk=1)
[This is a test, John's second story] [John's second story, This is a test]
# You can also instantiate an Article by passing # You can also instantiate an Article by passing
# the Reporter's ID instead of a Reporter object. # the Reporter's ID instead of a Reporter object.
@ -210,12 +212,12 @@ John Smith
[John Smith] [John Smith]
# If you delete a reporter, his articles will be deleted. # If you delete a reporter, his articles will be deleted.
>>> Article.objects.order_by('headline') >>> Article.objects.all()
[John's second story, Paul's story, This is a test, This is a test, This is a test] [John's second story, Paul's story, This is a test, This is a test, This is a test]
>>> Reporter.objects.order_by('first_name') >>> Reporter.objects.order_by('first_name')
[John Smith, Paul Jones] [John Smith, Paul Jones]
>>> r2.delete() >>> r2.delete()
>>> Article.objects.order_by('headline') >>> Article.objects.all()
[John's second story, This is a test, This is a test, This is a test] [John's second story, This is a test, This is a test, This is a test]
>>> Reporter.objects.order_by('first_name') >>> Reporter.objects.order_by('first_name')
[John Smith] [John Smith]