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

时间:2014-06-12 21:47:10

标签: python django

我有一家有青少年和老年人的公司。我想通过添加组而不是单独添加用户来添加用户。想象一下,我有第3组,由3名老年人组成,而不是单独添加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(...)

主要问题是这看起来很乱,我不得不为老年人和其他类型的用户重复它。

有没有更简单的方法来做我想做的事情?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

如果你对一个小的连接查询没问题,你可以使用这种语法来获得公司的小辈,id = COMP_ID

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

juniors = User.objects.filter(groups__company_id = COMP_ID,groups__type = Junior)

seniors = User.objects.filter(groups__company_id = COMP_ID,groups__type = Senior)

假设

  • 您将related_name“groups”添加到组和用户之间的m2m关系
  • 您的论坛有您管理的类型
  • 您在群组模型
  • 上调用了您的外键字段“公司”

此查询可以作为属性添加到公司模型中,因此它可以提供相同的程序性安心