summaryrefslogtreecommitdiff
path: root/tests/m2m_recursive/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/m2m_recursive/models.py')
-rw-r--r--tests/m2m_recursive/models.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/m2m_recursive/models.py b/tests/m2m_recursive/models.py
new file mode 100644
index 0000000000..b69930208c
--- /dev/null
+++ b/tests/m2m_recursive/models.py
@@ -0,0 +1,30 @@
+"""
+28. Many-to-many relationships between the same two tables
+
+In this example, a ``Person`` can have many friends, who are also ``Person``
+objects. Friendship is a symmetrical relationship - if I am your friend, you
+are my friend. Here, ``friends`` is an example of a symmetrical
+``ManyToManyField``.
+
+A ``Person`` can also have many idols - but while I may idolize you, you may
+not think the same of me. Here, ``idols`` is an example of a non-symmetrical
+``ManyToManyField``. Only recursive ``ManyToManyField`` fields may be
+non-symmetrical, and they are symmetrical by default.
+
+This test validates that the many-to-many table is created using a mangled name
+if there is a name clash, and tests that symmetry is preserved where
+appropriate.
+"""
+
+from django.db import models
+from django.utils.encoding import python_2_unicode_compatible
+
+
+@python_2_unicode_compatible
+class Person(models.Model):
+ name = models.CharField(max_length=20)
+ friends = models.ManyToManyField('self')
+ idols = models.ManyToManyField('self', symmetrical=False, related_name='stalkers')
+
+ def __str__(self):
+ return self.name