summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorGary Wilson Jr <gary.wilson@gmail.com>2008-08-16 20:59:06 +0000
committerGary Wilson Jr <gary.wilson@gmail.com>2008-08-16 20:59:06 +0000
commita949f9ec7d8bdd348f628c2d579f4cc633c56e56 (patch)
tree98930e4bcf3b5920e516b176b924c6bacdeef2a1 /tests
parenta2be52fd2a27b5a39744939c906cd57507aa8f10 (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__.py0
-rw-r--r--tests/regressiontests/get_or_create_regress/models.py91
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
+"""}