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

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)

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)

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.