Menambahkan pengguna ke grup di Django

139

Bagaimana saya menambahkan pengguna ke grup di Django dengan nama grup?

Aku bisa melakukan ini:

user.groups.add(1) # add by id

Bagaimana saya melakukan sesuatu seperti ini:

user.groups.add(name='groupname') # add by name
David542
sumber
Apakah versi solusi ini sensitif? Ketika saya mencoba ini adalah Django 1.8, saya mendapat "kata kunci tak terduga: nama"
rschwieb

Jawaban:

248

Temukan grup menggunakan model Grup dengan nama grup, lalu tambahkan pengguna ke user_set

from django.contrib.auth.models import Group
my_group = Group.objects.get(name='my_group_name') 
my_group.user_set.add(your_user)
juankysmith
sumber
17
Terima kasih untuk ini. Tampaknya konyol bahwa beberapa hal paling mendasar hilang atau sulit ditemukan di django docs
Francis Yaconiello
1
docs.djangoproject.com/en/dev/intro/tutorial01 Ada contoh serupa di bagian 'Bermain dengan API'
juankysmith
9
Tutorialnya cukup berguna, maksud saya adalah saya berharap dapat melihat di bagian dokumen di bawah auth untuk membuat grup secara terprogram. alih-alih semua yang ada adalah paragraf yang lemah: docs.djangoproject.com/en/1.3/topics/auth/#groups Saya kira perlu diingat bahwa model auth hanya model biasa, dan referensi model standar berlaku.
Francis Yaconiello
dimana ada user_setdi Django doc? Saya tidak dapat menemukannya di mana pun
Minh Thai
1
@MinhThai nilai default untuk bidang hubungan terbalik adalah <content_type>_setketika related_nametidak disetel pada bidang tersebut.
sox dengan Monica
99

Berikut cara melakukannya dalam versi modern Django (diuji dalam Django 1.7):

from django.contrib.auth.models import Group
group = Group.objects.get(name='groupname')
user.groups.add(group)
coredumperror
sumber
1
Anda juga dapat melakukannya Group.objects.get_by_natural_key('groupname'), tetapi tidak membuatnya korsleting: D
CpILL
2
@ kutu buku Di mana pun Anda perlu melakukannya. Mungkin dalam kode untuk Tampilan yang melakukan tugas Grup.
coredumperror