This is just another reason I find Django so easy.
For example.. Say you are making a monitoring application. Now you have a bunch of servers and you have certain groups of servers. A server can belong in more then one group also. So that is pretty easy and all with Django.
Now in your template you have a few pages. One page that displays the group information like all the servers in the group and another that displays the server information and will list all the groups that server is in. So below is my basic model layout
class Group(models.Model): parent = models.ForeignKey("Group", null=True, blank=True) user = models.ForeignKey(User) name = models.CharField(max_length=100) about = models.TextField(blank=True, null=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) def __unicode__(self): return self.name class Server(models.Model): hostname = models.CharField(max_length=300, db_index=True) about = models.TextField(blank=True, null=True) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) groups = models.ManyToManyField(Group) def __unicode__(self): return self.hostname
So to get all the groups my server is a member of is pretty easy.
s = Server.objects.get(id=1) s.groups.all()
Now to get all the servers in a group is also easy
g = Group.objects.get(id=1) g.server_set.all()