การเพิ่มผู้ใช้ในกลุ่มใน django


143

ฉันจะเพิ่มผู้ใช้ในกลุ่มใน django โดยใช้ชื่อกลุ่มได้อย่างไร

ฉันสามารถทำได้:

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

ฉันจะทำสิ่งนี้ได้อย่างไร:

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

โซลูชันเวอร์ชันนี้มีความละเอียดอ่อนหรือไม่ เมื่อฉันลองนี่คือ django 1.8 ฉันได้รับ "คำหลักที่ไม่คาดคิด: ชื่อ"
rschwieb

คำตอบ:


266

ค้นหากลุ่มโดยใช้โมเดลกลุ่มที่มีชื่อของกลุ่มจากนั้นเพิ่มผู้ใช้ลงใน 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)

18
ขอบคุณสำหรับสิ่งนี้. ดูเหมือนโง่ที่สิ่งพื้นฐานที่สุดบางอย่างหายไปหรือหายากในเอกสาร django
Francis Yaconiello

1
docs.djangoproject.com/en/dev/intro/tutorial01 มีตัวอย่างที่คล้ายกันในส่วน 'การเล่นกับ API'
juankysmith

9
บทแนะนำนี้มีประโยชน์มากสิ่งที่ฉันหมายถึงคือฉันคาดหวังว่าจะได้เห็นในส่วนของเอกสารภายใต้การรับรองความถูกต้องสำหรับการสร้างกลุ่มโดยใช้โปรแกรม แทนที่จะมีย่อหน้าที่อ่อนแอ: docs.djangoproject.com/en/1.3/topics/auth/#groupsฉันเดาว่ามันช่วยให้จำไว้ว่าแบบจำลองการตรวจสอบสิทธิ์เป็นเพียงโมเดลปกติและใช้การอ้างอิงโมเดลมาตรฐาน
Francis Yaconiello

ที่ไหนuser_setใน Django doc? หาที่ไหนไม่ได้
มินไทย

1
@MinhThai ค่าเริ่มต้นสำหรับฟิลด์ความสัมพันธ์ย้อนกลับคือ<content_type>_setเมื่อrelated_nameไม่ได้ตั้งค่าบนฟิลด์
sox กับ Monica

103

นี่คือวิธีการทำใน Django เวอร์ชันใหม่ (ทดสอบใน Django 1.7):

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

1
คุณสามารถทำได้Group.objects.get_by_natural_key('groupname')แต่ก็ไม่ได้ทำให้สั้นลง: D
CpILL

2
@enchance ทุกที่ที่คุณต้องทำ อาจอยู่ในโค้ดสำหรับ View ที่กำลังทำการกำหนดกลุ่ม
coredumperror

0

coredumperror ถูกต้อง แต่ฉันพบสิ่งหนึ่งที่ฉันต้องการแบ่งปันสิ่งนั้น

from django.contrib.auth.models import Group

# get_or_create return error due to 
new_group = Group.objects.get_or_create(name = 'groupName')
print(type(new_group))       # return tuple

new_group = Group.objects.get_or_create(name = 'groupName')
user.groups.add(new_group)   # new_group as tuple and it return error

# get() didn't return error due to 
new_group = Group.objects.get(name = 'groupName')
print(type(new_group))       # return <class 'django.contrib.auth.models.Group'>

user = User.objects.get(username = 'username')
user.groups.add(new_group)   # new_group as object and user is added
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.