2013-02-11 31 views
1

我試圖將屬於員工的用戶添加到變更中的員工組。我用信號和超載保存在用戶模型中,但它們都沒有工作。 django有什麼限制我沒有意識到保存時會有什麼限制嗎?Django羣組在保存時未更新用戶

這裏是我嘗試使用的兩個代碼片段。用戶從AbstractUser繼承,並與新的Django 1.5功能AUTH_USER_MODEL ='app.User'一起使用,組是標準認證組。

class User(AbstractUser): 
    def save(self, force_insert=False, force_update=False, **kwargs): 
     if self.is_staff: 
      if not self.groups.filter(name='staff').exists(): 
       g = Group.objects.get(name='staff') 
       g.user_set.add(self) 
     else: 
      if self.groups.filter(name='staff').exists(): 
       g = Group.objects.get(name='staff') 
       g.user_set.remove(self) 

     super(User, self).save(force_insert, force_update) 


@receiver(post_save, sender=User) 
def my_handler(sender, **kwargs): 
    user = kwargs['instance'] 
    if user.is_staff: 
     if not user.groups.filter(name='staff').exists(): 
      g = Group.objects.get(name='staff') 
      g.user_set.add(user) 
    else: 
     if user.groups.filter(name='staff').exists(): 
      g = Group.objects.get(name='staff') 
      g.user_set.remove(user) 
+0

我認爲這是因爲:如果不是user.groups.filter(name ='staff')。exists():.那是什麼意思?如果工作人員存在,您正在過濾,但如果user.is_staff – catherine 2013-02-11 15:02:00

+0

看起來沒問題,您就已經放棄了。嘗試另一種方式:如果不是self.groups.filter(name ='staff')。exists():self.groups.add(Group.objects.get(name ='staff')) – ndpu 2013-02-13 09:51:08

回答

2

如果使用form(ModelForm)然後消失羣組的原因可能是form.save_m2m()是您user.save()後調用。例如,如果您的表單中有一個空的「組」字段,則save_m2m只會刪除您的所有用戶組。