2

スタッフに属するユーザーを、変更時にスタッフ グループに追加しようとしています。シグナルを使用して User モデルで save をオーバーロードして試しましたが、どちらも機能していないようです。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)
4

1 に答える 1

2

を使用する場合form(ModelForm)、グループが消える理由は、 のform.save_m2m()後に呼び出される である可能性がありますuser.save()。たとえば、フォームに空の「グループ」フィールドがあるsave_m2m場合、ユーザーからすべてのグループを削除するだけです。

于 2013-02-21T11:37:05.510 に答える