2014-06-12 35 views
0

我有一个公司,有大三,大四。我想通过添加组而不是单独添加用户。想象一下,我有1组,由3个老人,而无需单独添加这些3,我希望能够只需添加1组,并有3个老人自动添加到老人的名单。我有点坚持我的当前实现:如何将用户添加到Django中的组中?

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(...) 

的主要问题是,这看起来凌乱,我要再说一遍老年人,和潜在的其他类型的用户也是如此。

有没有更简单的方法做我想要做什么?

在此先感谢!

回答

0

你试图优化,并避免在查询中使用的组对象?

,如果你是OK的小连接查询,你可以使用这个语法来获得公司的后辈与ID = COMP_ID

这种方式,你不需要直接处理用户和复制他们所有的时间

大三= User.objects.filter(groups__company_id = COMP_ID,groups__type =小型)

老年人= User.objects.filter(groups__company_id = COMP_ID,groups__type =高级)

假设

  • 添加related_name“团”来的组和用户之间的M2M关系
  • 您的组有其管理
  • 你叫你的外键字段“公司”你组模型
类型

这种查询可以被添加为物业公司模式,所以它给心灵

相同纲领性和平
相关问题