from django.db import models class Person(models.Model): name = models.CharField(max_length=200) groups = models.ManyToManyField('Group', through='GroupMember', related_name='people') class Meta: ordering = ['name'] def __unicode__(self): return self.name class Group(models.Model): name = models.CharField(max_length=200) class Meta: ordering = ['name'] def __unicode__(self): return self.name class GroupMember(models.Model): person = models.ForeignKey(Person, related_name='membership') group = models.ForeignKey(Group, related_name='membership') type = models.CharField(max_length=100) def __unicode__(self): return "%s is in group %s (as %s)" % (self.person, self.group, self.type)