Django'da bir gruba kullanıcı ekleme


139

Django'daki bir gruba grubun adıyla nasıl kullanıcı eklerim?

Bunu yapabilirim:

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

Böyle bir şeyi nasıl yaparım:

user.groups.add(name='groupname') # add by name

Bu çözüm sürümü hassas mı? Bunu denediğimde django 1.8, "beklenmedik anahtar kelime: ad" aldım
rschwieb

Yanıtlar:


248

Grubun adıyla Grup modelini kullanarak grubu bulun, ardından kullanıcıyı user_set'e ekleyin

from django.contrib.auth.models import Group
my_group = Group.objects.get(name='my_group_name') 
my_group.user_set.add(your_user)

17
Bunun için teşekkürler. Aptalca görünüyor ki, en temel şeylerden bazılarının eksik olması ya da django belgelerinde bulunması zor
Francis Yaconiello

1
docs.djangoproject.com/en/dev/intro/tutorial01 'API ile Oynama' bölümünde benzer örnekler var
juankysmith

9
Öğretici oldukça kullanışlıdır. Demek istediğim, programatik olarak gruplar oluşturmak için yetkilendirme altındaki belgelerin bir bölümünde görmeyi umduğumdu. bunun yerine zayıf bir paragraf var: docs.djangoproject.com/en/1.3/topics/auth/#groups Auth modellerinin sadece normal modeller olduğunu ve standart model referansının geçerli olduğunu akılda tutmanın yardımcı olacağını tahmin ediyorum.
Francis Yaconiello

user_setDjango doc nerede ? Hiçbir yerde bulamıyorum
Minh Thai

1
@MinhThai ters ilişki alanı için varsayılan değerdir <content_type>_setzaman related_namesahada ayarlı değil.
sox, Monica ile

99

Django'nun modern sürümlerinde bunu nasıl yapacağınız aşağıda açıklanmıştır (Django 1.7'de test edilmiştir):

from django.contrib.auth.models import Group
group = Group.objects.get(name='groupname')
user.groups.add(group)

1
siz de yapabilirsiniz Group.objects.get_by_natural_key('groupname'), ancak
kısaltmaz

2
@enchance Bunu yapmanız gereken her yerde. Muhtemelen Grup atamaları yapan bir Görünümün kodunun içinde.
coredumperror
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.