Thêm người dùng vào một nhóm trong django


139

Làm cách nào để thêm người dùng vào một nhóm trong django theo tên của nhóm?

Tôi có thể làm điều này:

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

Làm thế nào tôi có thể làm một cái gì đó như thế này:

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

Là phiên bản giải pháp này nhạy cảm? Khi tôi thử cái này là django 1.8, tôi đã nhận được "từ khóa bất ngờ: tên"
rschwieb

Câu trả lời:


247

Tìm nhóm bằng mô hình Nhóm với tên của nhóm, sau đó thêm người dùng vào 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
Cảm ơn vì điều đó. Có vẻ ngớ ngẩn khi một số điều cơ bản nhất bị thiếu hoặc khó tìm thấy trong các tài liệu django
Francis Yaconiello

1
docs.djangoproject.com/en/dev/intro/tutorial01 Có những ví dụ tương tự trong phần 'Chơi với API'
juankysmith

9
Hướng dẫn này khá hữu ích, điều tôi muốn nói là tôi sẽ thấy trong một phần của các tài liệu dưới quyền auth cho các nhóm tạo lập trình. thay vào đó, tất cả chỉ có một đoạn yếu: docs.djangoproject.com/en/1.3/topics/auth/#groups Tôi đoán rằng sẽ giúp ghi nhớ rằng các mô hình auth chỉ là mô hình thông thường và áp dụng tham chiếu mô hình chuẩn.
Francis Yaconiello

ở đâu user_settrong Django doc? Tôi không thể tìm thấy nó ở bất cứ đâu
Minh Thái

1
@MinhThai giá trị mặc định cho trường quan hệ ngược là <content_type>_setkhi related_namekhông được đặt trên trường.
sox với Monica

99

Dưới đây là cách thực hiện điều này trong các phiên bản hiện đại của Django (đã được thử nghiệm trong Django 1.7):

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

1
bạn cũng có thể làm Group.objects.get_by_natural_key('groupname')nhưng không rút ngắn được: D
CpILL

2
@enchance Bất cứ nơi nào bạn cần làm như vậy. Có thể trong mã cho Chế độ xem đang thực hiện các bài tập nhóm.
coredumperror
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.