diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-06-26 07:04:18 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2008-06-26 07:04:18 +0000 |
| commit | d2ce1df08fcf7b17897e9576028d19bbd2fdfa93 (patch) | |
| tree | c42cde403695df611d7f5a81325e87b1864279f1 /tests | |
| parent | ba015e0a79f6e51a2253fb0b95c9a68acb2d6090 (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.py | 45 |
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') |
