diff options
| author | Renaud Parent <renaud.parent@gmail.com> | 2014-06-06 16:16:17 +0000 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-06-18 13:53:07 -0400 |
| commit | 87d0a3384cc263fe0df749a28e2fbc1e1240f043 (patch) | |
| tree | 6cb2c535b6977abd626cf96fede8fcca5595300a /tests/model_options | |
| parent | de9012907063e210e97c0d65cde312ff6174d420 (diff) | |
Fixed #22778 -- Added a model Meta option to define default_related_name.
Thanks jorgecarleitao and mmardini for reviews.
Diffstat (limited to 'tests/model_options')
| -rw-r--r-- | tests/model_options/models/default_related_name.py | 41 | ||||
| -rw-r--r-- | tests/model_options/test_default_related_name.py | 46 |
2 files changed, 87 insertions, 0 deletions
diff --git a/tests/model_options/models/default_related_name.py b/tests/model_options/models/default_related_name.py new file mode 100644 index 0000000000..57b52647e6 --- /dev/null +++ b/tests/model_options/models/default_related_name.py @@ -0,0 +1,41 @@ +from django.db import models + + +class Author(models.Model): + first_name = models.CharField(max_length=128) + last_name = models.CharField(max_length=128) + + +class Editor(models.Model): + name = models.CharField(max_length=128) + bestselling_author = models.ForeignKey(Author) + + +class Book(models.Model): + title = models.CharField(max_length=128) + authors = models.ManyToManyField(Author) + editor = models.ForeignKey(Editor, related_name="edited_books") + + class Meta: + default_related_name = "books" + + +class Store(models.Model): + name = models.CharField(max_length=128) + address = models.CharField(max_length=128) + + class Meta: + abstract = True + default_related_name = "%(app_label)s_%(model_name)ss" + + +class BookStore(Store): + available_books = models.ManyToManyField(Book) + + +class EditorStore(Store): + editor = models.ForeignKey(Editor) + available_books = models.ManyToManyField(Book) + + class Meta: + default_related_name = "editor_stores" diff --git a/tests/model_options/test_default_related_name.py b/tests/model_options/test_default_related_name.py new file mode 100644 index 0000000000..6cdffe5cf9 --- /dev/null +++ b/tests/model_options/test_default_related_name.py @@ -0,0 +1,46 @@ +from django.test import TestCase + +from .models.default_related_name import Author, Editor, Book + + +class DefaultRelatedNameTests(TestCase): + + def setUp(self): + self.author = Author.objects.create(first_name="Dave", last_name="Loper") + self.editor = Editor.objects.create(name="Test Editions", + bestselling_author=self.author) + self.book = Book.objects.create(title="Test Book", editor=self.editor) + self.book.authors.add(self.author) + self.book.save() + + def test_no_default_related_name(self): + try: + self.author.editor_set + except AttributeError: + self.fail("Author should have an editor_set relation.") + + def test_default_related_name(self): + try: + self.author.books + except AttributeError: + self.fail("Author should have a books relation.") + + def test_related_name_overrides_default_related_name(self): + try: + self.editor.edited_books + except AttributeError: + self.fail("Editor should have a edited_books relation.") + + def test_inheritance(self): + try: + # Here model_options corresponds to the name of the application used + # in this test + self.book.model_options_bookstores + except AttributeError: + self.fail("Book should have a model_options_bookstores relation.") + + def test_inheritance_with_overrided_default_related_name(self): + try: + self.book.editor_stores + except AttributeError: + self.fail("Book should have a editor_stores relation.") |
