1

我有一个关于如何用 Django 实现一些组逻辑的问题,所以这里有一张图片来帮助理解我的目标:

http://i.stack.imgur.com/RpKJA.png

编辑: http://i.stack.imgur.com/h8SEW.png

所以我想要得到的是:

  • 有一个主要组 (Group1),当成员加入子组 Group2 和 3 时 - 他将自动添加到 Group1
  • Group2 和 Group3 中都可以有成员——尽管它们不应该在 Group1 中存在两次。

如果可以实现,我还希望具有以下功能:

  • Group4 又是 Group3 的一个子组,如果一个成员加入 Group4,他应该自动被保存为 Group3 的成员,从而也成为 Group1 的成员。

目前我有以下型号:

#models.py
class MyGroup(models.Model):

    label = models.CharField(_('Label'), max_length=30)
    members = models.ManyToManyField('MyUser', null=True, blank=True)
    parents = models.ManyToManyField('self', null=True, blank=True, symmetrical=False)
    # parents could be renamed to supersets/masters as well

class MyUser(AbstractBaseUser, PermissionsMixin):
    subscriptions = models.ManyToManyField(
        MyGroup, through=MyGroup.members.through, blank=True
    )

提前感谢您的任何答案 - 这也有助于了解它是否真的可以实现:然后我会知道我不会浪费时间,想办法如何做到这一点,一无所获。

编辑:

我试着这样做:

def save(self, *args, **kwargs):
    if self.parents is not None:
        list_of_parents = self.parents.all()
        for x in range(0, len(list_of_parents)):
            new_list_of_users = list(set(list_of_parents[x].members.all()) | set(self.members.all()))
            list_of_parents[x].members = new_list_of_users
            super(MailingList, list_of_parents[x]).save(*args, **kwargs)
    super(MailingList, self).save(*args, **kwargs)

这有点工作,但也有非常不愉快的缺陷:

  • 当我将成员保存在组菜单上时,用户只会保存在父组中(因为这是组模型的保存功能) - 我也可以在用户模型中添加另一个保存功能,但它并没有变得更好
  • 这里的大问题是,我不能再添加新组,因为我会收到以下错误: "<MyGroup: group5>" needs to have a value for field "from_mygroup" before this many-to-many relationship can be used.
  • 最后但并非最不重要的一点是,我认为通过保存功能实现事物的方式不会很好 - 特别是当每个组中有大量成员时......
4

0 回答 0