diff options
| author | Gary Wilson Jr <gary.wilson@gmail.com> | 2008-08-16 20:59:06 +0000 |
|---|---|---|
| committer | Gary Wilson Jr <gary.wilson@gmail.com> | 2008-08-16 20:59:06 +0000 |
| commit | a949f9ec7d8bdd348f628c2d579f4cc633c56e56 (patch) | |
| tree | 98930e4bcf3b5920e516b176b924c6bacdeef2a1 /tests | |
| parent | a2be52fd2a27b5a39744939c906cd57507aa8f10 (diff) | |
Fixed #3121 -- Made `get_or_create()` work for `RelatedManager` and `ManyRelatedManager`.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@8415 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/get_or_create_regress/__init__.py | 0 | ||||
| -rw-r--r-- | tests/regressiontests/get_or_create_regress/models.py | 91 |
2 files changed, 91 insertions, 0 deletions
diff --git a/tests/regressiontests/get_or_create_regress/__init__.py b/tests/regressiontests/get_or_create_regress/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/regressiontests/get_or_create_regress/__init__.py diff --git a/tests/regressiontests/get_or_create_regress/models.py b/tests/regressiontests/get_or_create_regress/models.py new file mode 100644 index 0000000000..1b7b00a69a --- /dev/null +++ b/tests/regressiontests/get_or_create_regress/models.py @@ -0,0 +1,91 @@ +from django.db import models + +class Publisher(models.Model): + name = models.CharField(max_length=100) + +class Author(models.Model): + name = models.CharField(max_length=100) + +class Book(models.Model): + name = models.CharField(max_length=100) + authors = models.ManyToManyField(Author, related_name='books') + publisher = models.ForeignKey(Publisher, related_name='books') + + +__test__ = {'one':""" +# +# RelatedManager +# + +# First create a Publisher. +>>> p = Publisher.objects.create(name='Acme Publishing') + +# Create a book through the publisher. +>>> book, created = p.books.get_or_create(name='The Book of Ed & Fred') +>>> created +True + +# The publisher should have one book. +>>> p.books.count() +1 + +# Try get_or_create again, this time nothing should be created. +>>> book, created = p.books.get_or_create(name='The Book of Ed & Fred') +>>> created +False + +# And the publisher should still have one book. +>>> p.books.count() +1 + +# +# ManyRelatedManager +# + +# Add an author to the book. +>>> ed, created = book.authors.get_or_create(name='Ed') +>>> created +True + +# Book should have one author. +>>> book.authors.count() +1 + +# Try get_or_create again, this time nothing should be created. +>>> ed, created = book.authors.get_or_create(name='Ed') +>>> created +False + +# And the book should still have one author. +>>> book.authors.count() +1 + +# Add a second author to the book. +>>> fred, created = book.authors.get_or_create(name='Fred') +>>> created +True + +# The book should have two authors now. +>>> book.authors.count() +2 + +# Create an Author not tied to any books. +>>> Author.objects.create(name='Ted') +<Author: Author object> + +# There should be three Authors in total. The book object should have two. +>>> Author.objects.count() +3 +>>> book.authors.count() +2 + +# Try creating a book through an author. +>>> ed.books.get_or_create(name="Ed's Recipies", publisher=p) +(<Book: Book object>, True) + +# Now Ed has two Books, Fred just one. +>>> ed.books.count() +2 +>>> fred.books.count() +1 +"""} |
