diff options
| author | Justin Bronn <jbronn@gmail.com> | 2008-08-05 17:15:33 +0000 |
|---|---|---|
| committer | Justin Bronn <jbronn@gmail.com> | 2008-08-05 17:15:33 +0000 |
| commit | aa239e3e5405933af6a29dac3cf587b59a099927 (patch) | |
| tree | ea2cbd139c9a8cf84c09e0b2008bff70e05927ef /tests/regressiontests/m2m_through_regress/models.py | |
| parent | 45b73c9a4685809236f84046cc7ffd32a50db958 (diff) | |
gis: Merged revisions 7981-8001,8003-8011,8013-8033,8035-8036,8038-8039,8041-8063,8065-8076,8078-8139,8141-8154,8156-8214 via svnmerge from trunk.archive/attic/gis
git-svn-id: http://code.djangoproject.com/svn/django/branches/gis@8215 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/m2m_through_regress/models.py')
| -rw-r--r-- | tests/regressiontests/m2m_through_regress/models.py | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/tests/regressiontests/m2m_through_regress/models.py b/tests/regressiontests/m2m_through_regress/models.py new file mode 100644 index 0000000000..16d2c4ec1b --- /dev/null +++ b/tests/regressiontests/m2m_through_regress/models.py @@ -0,0 +1,204 @@ +from django.db import models +from datetime import datetime +from django.contrib.auth.models import User + +# Forward declared intermediate model +class Membership(models.Model): + person = models.ForeignKey('Person') + group = models.ForeignKey('Group') + date_joined = models.DateTimeField(default=datetime.now) + + def __unicode__(self): + return "%s is a member of %s" % (self.person.name, self.group.name) + +class UserMembership(models.Model): + user = models.ForeignKey(User) + group = models.ForeignKey('Group') + date_joined = models.DateTimeField(default=datetime.now) + + def __unicode__(self): + return "%s is a user and member of %s" % (self.user.username, self.group.name) + +class Person(models.Model): + name = models.CharField(max_length=128) + + def __unicode__(self): + return self.name + +class Group(models.Model): + name = models.CharField(max_length=128) + # Membership object defined as a class + members = models.ManyToManyField(Person, through=Membership) + user_members = models.ManyToManyField(User, through='UserMembership') + + def __unicode__(self): + return self.name + +__test__ = {'API_TESTS':""" +# Create some dummy data +>>> bob = Person.objects.create(name='Bob') +>>> jim = Person.objects.create(name='Jim') + +>>> rock = Group.objects.create(name='Rock') +>>> roll = Group.objects.create(name='Roll') + +>>> frank = User.objects.create_user('frank','frank@example.com','password') +>>> jane = User.objects.create_user('jane','jane@example.com','password') + +# Now test that the forward declared Membership works +>>> Membership.objects.create(person=bob, group=rock) +<Membership: Bob is a member of Rock> + +>>> Membership.objects.create(person=bob, group=roll) +<Membership: Bob is a member of Roll> + +>>> Membership.objects.create(person=jim, group=rock) +<Membership: Jim is a member of Rock> + +>>> bob.group_set.all() +[<Group: Rock>, <Group: Roll>] + +>>> roll.members.all() +[<Person: Bob>] + +# Error messages use the model name, not repr of the class name +>>> bob.group_set = [] +Traceback (most recent call last): +... +AttributeError: Cannot set values on a ManyToManyField which specifies an intermediary model. Use Membership's Manager instead. + +>>> roll.members = [] +Traceback (most recent call last): +... +AttributeError: Cannot set values on a ManyToManyField which specifies an intermediary model. Use Membership's Manager instead. + +>>> rock.members.create(name='Anne') +Traceback (most recent call last): +... +AttributeError: Cannot use create() on a ManyToManyField which specifies an intermediary model. Use Membership's Manager instead. + +>>> bob.group_set.create(name='Funk') +Traceback (most recent call last): +... +AttributeError: Cannot use create() on a ManyToManyField which specifies an intermediary model. Use Membership's Manager instead. + +# Now test that the intermediate with a relationship outside +# the current app (i.e., UserMembership) workds +>>> UserMembership.objects.create(user=frank, group=rock) +<UserMembership: frank is a user and member of Rock> + +>>> UserMembership.objects.create(user=frank, group=roll) +<UserMembership: frank is a user and member of Roll> + +>>> UserMembership.objects.create(user=jane, group=rock) +<UserMembership: jane is a user and member of Rock> + +>>> frank.group_set.all() +[<Group: Rock>, <Group: Roll>] + +>>> roll.user_members.all() +[<User: frank>] + +"""} +from django.db import models +from datetime import datetime +from django.contrib.auth.models import User + +# Forward declared intermediate model +class Membership(models.Model): + person = models.ForeignKey('Person') + group = models.ForeignKey('Group') + date_joined = models.DateTimeField(default=datetime.now) + + def __unicode__(self): + return "%s is a member of %s" % (self.person.name, self.group.name) + +class UserMembership(models.Model): + user = models.ForeignKey(User) + group = models.ForeignKey('Group') + date_joined = models.DateTimeField(default=datetime.now) + + def __unicode__(self): + return "%s is a user and member of %s" % (self.user.username, self.group.name) + +class Person(models.Model): + name = models.CharField(max_length=128) + + def __unicode__(self): + return self.name + +class Group(models.Model): + name = models.CharField(max_length=128) + # Membership object defined as a class + members = models.ManyToManyField(Person, through=Membership) + user_members = models.ManyToManyField(User, through='UserMembership') + + def __unicode__(self): + return self.name + +__test__ = {'API_TESTS':""" +# Create some dummy data +>>> bob = Person.objects.create(name='Bob') +>>> jim = Person.objects.create(name='Jim') + +>>> rock = Group.objects.create(name='Rock') +>>> roll = Group.objects.create(name='Roll') + +>>> frank = User.objects.create_user('frank','frank@example.com','password') +>>> jane = User.objects.create_user('jane','jane@example.com','password') + +# Now test that the forward declared Membership works +>>> Membership.objects.create(person=bob, group=rock) +<Membership: Bob is a member of Rock> + +>>> Membership.objects.create(person=bob, group=roll) +<Membership: Bob is a member of Roll> + +>>> Membership.objects.create(person=jim, group=rock) +<Membership: Jim is a member of Rock> + +>>> bob.group_set.all() +[<Group: Rock>, <Group: Roll>] + +>>> roll.members.all() +[<Person: Bob>] + +# Error messages use the model name, not repr of the class name +>>> bob.group_set = [] +Traceback (most recent call last): +... +AttributeError: Cannot set values on a ManyToManyField which specifies an intermediary model. Use Membership's Manager instead. + +>>> roll.members = [] +Traceback (most recent call last): +... +AttributeError: Cannot set values on a ManyToManyField which specifies an intermediary model. Use Membership's Manager instead. + +>>> rock.members.create(name='Anne') +Traceback (most recent call last): +... +AttributeError: Cannot use create() on a ManyToManyField which specifies an intermediary model. Use Membership's Manager instead. + +>>> bob.group_set.create(name='Funk') +Traceback (most recent call last): +... +AttributeError: Cannot use create() on a ManyToManyField which specifies an intermediary model. Use Membership's Manager instead. + +# Now test that the intermediate with a relationship outside +# the current app (i.e., UserMembership) workds +>>> UserMembership.objects.create(user=frank, group=rock) +<UserMembership: frank is a user and member of Rock> + +>>> UserMembership.objects.create(user=frank, group=roll) +<UserMembership: frank is a user and member of Roll> + +>>> UserMembership.objects.create(user=jane, group=rock) +<UserMembership: jane is a user and member of Rock> + +>>> frank.group_set.all() +[<Group: Rock>, <Group: Roll>] + +>>> roll.user_members.all() +[<User: frank>] + +"""}
\ No newline at end of file |
