我有一个关于如何用 Django 实现一些组逻辑的问题,所以这里有一张图片来帮助理解我的目标:
所以我想要得到的是:
- 有一个主要组 (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.
- 最后但并非最不重要的一点是,我认为通过保存功能实现事物的方式不会很好 - 特别是当每个组中有大量成员时......