I’m trying to do something simple like this:
members = models.ManyToManyField(User, blank=True, null=True, unique=True)
but unique isn’t allowed. When looking at the table created, it makes foreign keys so uniqueness is implied I imagine.
I want to be able to associate members with this model representing a group. The group can have no members but I don’t want the same member to be able to join the group twice.
My thought would be that an exception would be thrown if I try and do this but it seems that an exception is not thrown.
def join(request,id):
user = request.user
mygroup = Group.objects.get(id=id)
mygroup.members.add(user)
mygroup.num_members += 1
mygroup.save()
num_members is incremented, because no exception is thrown. Duplicate users don’t appear in the admin utility. Does add() fail silently? Should I just simply check if the user is contained already before adding?
For one, I wouldn’t use
num_members. Instead, you can check how many members there are withmygroup.members.count(). Secondly, adding members more than once doesn’t really add them more than once, so you’re fine.A
ManyToManyFieldonGroupformemberpointing toUseris implemented with a separate table (something likegroup_group_users) which has a foreign key toGroupandUser. A user can have multiple groups, and a group can have multiple users, but there can’t be two rows ingroup_group_usersfor the same relationship (ie, unique together foreign keys).Usage: