我想存储邀请其他用户加入组的用户。。。但django告诉我这是矛盾的,违反了规则(这是有道理的)。
groups.group: Intermediary model Group_to_Member has more than one foreign key to User, which is ambiguous and is not permitted.
那我该怎么做呢?可能是一般关系?可能有用,但似乎有点复杂。。。下面是我如何接近它(去掉无关的部分)
from django.contrib.auth.models import User
class UserGroup(models.Model):
members = models.ManyToManyField(User, through='Group_to_Member')
class UserGroup_to_Member(models.Model):
group = models.ForeignKey(UserGroup)
member = models.ForeignKey(User)
invited_by = models.ForeignKey(User, related_name="group_invited_users")
好吧,我把你们提供的答案结合起来了(谢谢!)我在网上找到的东西,加上我自己公认的微薄的python fu:
from django.contrib.auth.models import User
class UserGroup(models.Model):
# notice there is no member object here
... other model data
def add_member(self, **kwargs):
g2m = UserGroup_to_Member(group = self, **kwargs)
g2m.save()
def remove_member(self, member):
g2m = UserGroup_to_Member.objects.get(group=self, member=member)
g2m.delete()
# This is not elegant at all, help please? I'm pretty sure it isn't
# as bad on the database as it looks though.
def get_members(self):
g2ms = UserGroup_to_Member.objects.filter(group=self)
member_ids = [g2m.member.id for g2m in g2ms]
members = User.objects.none()
for id in member_ids:
members = members | User.objects.get(id=id)
return members
class UserGroup_to_Member(models.Model):
group = models.ForeignKey(UserGroup)
member = models.ForeignKey(User)
invited_by = models.ForeignKey(User, related_name="group_invited_users")
你必须自己管理:
然后你就不用
group.members.all()
而是group.membership_set.all()
。另外,我不会使用'Group'作为模型名,因为Django已经有了一个Group对象。
如果您使用的是Django 1.7,那么这是可能的。
来自文档:https://docs.djangoproject.com/en/1.7/topics/db/models/#extra-fields-on-many-to-many-relationships
相关问题 更多 >
编程相关推荐