Python 如何在Django中将用户从组添加到模型?

Python 如何在Django中将用户从组添加到模型?,python,django,Python,Django,我有一家公司,有三年级的和四年级的。我想通过添加组而不是单独添加用户来添加用户。假设我有一个由3位长者组成的小组1,我不想单独添加这3位长者,我只想添加小组1,让3位长者自动添加到长者列表中。我在当前的实现中遇到了一些困难: class Company(django.model): juniors = m2m(User) seniors = m2m(User) junior_groups = m2m(Group) senior_groups = m2m(Grou

我有一家公司,有三年级的和四年级的。我想通过添加组而不是单独添加用户来添加用户。假设我有一个由3位长者组成的小组1,我不想单独添加这3位长者,我只想添加小组1,让3位长者自动添加到长者列表中。我在当前的实现中遇到了一些困难:

class Company(django.model):
    juniors = m2m(User)
    seniors = m2m(User)

    junior_groups = m2m(Group)
    senior_groups = m2m(Group)

# currently, I use this signal to add users from a group when a group is added to company
def group_changed(sender, **kwargs):
    if kwargs['action'] != 'post_add': return None

    co = kwargs['instance']
    group_id = kwargs['pk_set'].pop()
    juniors = MyGroup.objects.get(pk=group_id).user_set.all()
    co.juniors = co.juniors.all() | juniors
    co.save()

m2m_changed.connect(...)
主要的问题是这看起来很混乱,我不得不对老年人重复这一点,可能还有其他类型的用户

有没有更直接的方法来做我想做的事情


提前谢谢

您是否试图优化并避免在查询中使用组对象

如果您对一个小的连接查询没有问题,那么可以使用此语法来获取id=COMP_id的junior

这样,您就不需要直接处理用户并一直复制它们

juniors=User.objects.filter(groups\u company\u id=COMP\u id,groups\u type=Junior)

seniors=User.objects.filter(组\公司\ id=COMP \ id,组\类型=Senior)

假设

  • 将相关名称“组”添加到组和用户之间的m2m关系中
  • 您的组具有您管理的类型
  • 您将组模型上的外键字段称为“公司”
这个查询可以作为一个属性添加到公司模型中,因此它提供了同样的编程安全性