こんにちは、私はDjango 1.9を使用しています。作成または保存時にグループ化するユーザーを追加しようとしています。 user.groupsまたはgroups.user_set.addのいずれかを使用しても動作しません。下記の保存前と保存後のものを混在させてください。Djangoでグループ保存するユーザーを追加する1.9
これらの答えは私のために働いていない、とこれはだまされやすい人ではありません。 Adding user to group on creation in Django
Adding a user to a group in django
Add users to groups in Django
私は前後の保存ハンドラの両方で両方の方法を試してみました。
@receiver(pre_save, sender=User)
def user_presave_handler(sender, instance, **kwargs):
if instance.is_staff and not instance.is_superuser:
# Grant all permissions
try:
instance.groups.add(Group.objects.get(name='staff_user'))
except Group.DoesNotExist:
pass
@receiver(post_save, sender=User)
def user_postsave_handler(sender, instance, **kwargs):
if instance.is_staff and not instance.is_superuser:
try:
g = Group.objects.get(name='staff_user')
except Group.DoesNotExist:
pass
else:
g.user_set.add(instance)
g.save()
ここではどの方法を使用したかを試してみました。私はテストで複数の方法を使用しません。ユーザー管理ページの保存ボタンを押すと、そのユーザーはグループのように表示されません。
Iハンドラが呼び出さなっていることをダブルチェック、ユーザー・ロジックが正しいか、など
は私が間違ってやっている何か、または古い方法を破るために1.9に変更されているものはありますか?
ありがとうございます!
編集:多分私はそれが間違って作られたものの、
group, __ = Group.objects.get_or_create(name='staff_user')
permissions = Permission.objects.all()
for p in permissions:
group.permissions.add(p)
group.save()
私はそれをデバッグしていると、グループは間違いなく存在するので、それは適用されません。求めて人のために は、グループは、このように作成されましたか?
'instance.groups.add'は機能します...グループが存在していますか? – TheWaveLad
受信機にブレークポイントを追加して実際に何が起きているのかを知ることをお勧めします( 'import pdb; pdb.set_trace()') –
正しく見えます。手動でメソッドを呼び出そうとしたことがありますか? – Jann