我有一家有青少年和老年人的公司。我想通过添加组而不是单独添加用户来添加用户。想象一下,我有第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(...)
主要问题是这看起来很乱,我不得不为老年人和其他类型的用户重复它。
有没有更简单的方法来做我想做的事情?
提前致谢!
答案 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)
假设
此查询可以作为属性添加到公司模型中,因此它可以提供相同的程序性安心