summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-06-26 07:04:18 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-06-26 07:04:18 +0000
commitd2ce1df08fcf7b17897e9576028d19bbd2fdfa93 (patch)
treec42cde403695df611d7f5a81325e87b1864279f1 /tests
parentba015e0a79f6e51a2253fb0b95c9a68acb2d6090 (diff)
Fixed #7215 -- Create correct reverse-relation accessors when using abstract base classes. Patch from Joel Watts.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@7762 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/modeltests/model_inheritance/models.py45
1 files changed, 42 insertions, 3 deletions
diff --git a/tests/modeltests/model_inheritance/models.py b/tests/modeltests/model_inheritance/models.py
index 7c737b6bd1..9842cb166b 100644
--- a/tests/modeltests/model_inheritance/models.py
+++ b/tests/modeltests/model_inheritance/models.py
@@ -39,6 +39,29 @@ class Student(CommonInfo):
pass
#
+# Abstract base classes with related models
+#
+
+class Post(models.Model):
+ title = models.CharField(max_length=50)
+
+class Attachment(models.Model):
+ post = models.ForeignKey(Post, related_name='attached_%(class)s_set')
+ content = models.TextField()
+
+ class Meta:
+ abstract = True
+
+ def __unicode__(self):
+ return self.content
+
+class Comment(Attachment):
+ is_spam = models.BooleanField()
+
+class Link(Attachment):
+ url = models.URLField()
+
+#
# Multi-table inheritance
#
@@ -128,9 +151,25 @@ Traceback (most recent call last):
...
AttributeError: type object 'CommonInfo' has no attribute 'objects'
-# The Place/Restaurant/ItalianRestaurant models, on the other hand, all exist
-# as independent models. However, the subclasses also have transparent access
-# to the fields of their ancestors.
+# Create a Post
+>>> post = Post(title='Lorem Ipsum')
+>>> post.save()
+
+# The Post model has distinct accessors for the Comment and Link models.
+>>> post.attached_comment_set.create(content='Save $ on V1agr@', is_spam=True)
+<Comment: Save $ on V1agr@>
+>>> post.attached_link_set.create(content='The Web framework for perfectionists with deadlines.', url='http://www.djangoproject.com/')
+<Link: The Web framework for perfectionists with deadlines.>
+
+# The Post model doesn't have an attribute called 'attached_%(class)s_set'.
+>>> getattr(post, 'attached_%(class)s_set')
+Traceback (most recent call last):
+ ...
+AttributeError: 'Post' object has no attribute 'attached_%(class)s_set'
+
+# The Place/Restaurant/ItalianRestaurant models all exist as independent
+# models. However, the subclasses also have transparent access to the fields of
+# their ancestors.
# Create a couple of Places.
>>> p1 = Place(name='Master Shakes', address='666 W. Jersey')