Saya membuat grup khusus di situs admin Django.
Dalam kode saya, saya ingin memeriksa apakah ada pengguna di grup ini. Bagaimana aku melakukan itu?
Saya membuat grup khusus di situs admin Django.
Dalam kode saya, saya ingin memeriksa apakah ada pengguna di grup ini. Bagaimana aku melakukan itu?
Anda dapat mengakses grup hanya melalui groups
atribut aktif User
.
from django.contrib.auth.models import User, Group
group = Group(name = "Editor")
group.save() # save this new group for this example
user = User.objects.get(pk = 1) # assuming, there is one initial user
user.groups.add(group) # user is now in the "Editor" group
lalu user.groups.all()
kembali [<Group: Editor>]
.
Atau, dan lebih langsung, Anda dapat memeriksa apakah pengguna berada dalam grup dengan:
if django_user.groups.filter(name = groupname).exists():
...
Catatan yang jugagroupname
bisa menjadi objek Grup Django yang sebenarnya.
if user.groups.filter(name=group_name).count(): # do something
Objek Pengguna Anda ditautkan ke objek Grup melalui ManyToMany hubungan .
Dengan demikian Anda dapat menerapkan metode filter ke user.groups .
Jadi, untuk memeriksa apakah Pengguna yang diberikan berada dalam grup tertentu ("Anggota" sebagai contoh), lakukan saja ini:
Jika Anda ingin memeriksa apakah pengguna tertentu memiliki lebih dari satu grup, gunakan operator __in seperti:
Perhatikan bahwa fungsi tersebut dapat digunakan dengan dekorator @user_passes_test untuk mengelola akses ke tampilan Anda:
Semoga bantuan ini
sumber
user in groups
(atau sebaliknya)..exists()
sampai akhir untuk mengembalikan boolean? Jika tidakis_member()
danis_in_multiple_groups()
akan mengembalikanQuerySet
, yang mungkin tidak memberikan hasil yang diinginkan.def is_member(user): return user.is_superuser or user.groups.filter(...
is_in_multiple_groups
dapat secara eksplisit dinamaiis_in_some_groups
karena tidak mengharuskan pengguna menjadi anggota dari semua grupJika Anda membutuhkan daftar pengguna yang ada dalam grup, Anda dapat melakukan ini sebagai gantinya:
lalu periksa
untuk memeriksa apakah pengguna berada dalam grup.
sumber
user.groups.filter(name="group name").exists()
harus bekerja dengan baik. Solusi yang Anda tulis menggunakan dua pertanyaan dan karenanya tidak terlalu optimal.Jika Anda tidak memerlukan instance pengguna di situs (seperti yang saya lakukan), Anda dapat melakukannya dengan
Ini hanya akan menghasilkan satu permintaan ke database dan mengembalikan boolean.
sumber
Jika pengguna milik kelompok tertentu atau tidak, dapat diperiksa di templat Django menggunakan:
{% if group in request.user.groups.all %}
"some action"
{% endif %}
sumber
Anda hanya perlu satu baris:
sumber
Untuk jaga-jaga jika Anda ingin memeriksa grup pengguna milik daftar grup yang telah ditentukan:
sumber
Saya memiliki situasi yang serupa, saya ingin menguji apakah pengguna berada dalam kelompok tertentu. Jadi, saya telah membuat file utils.py baru di mana saya meletakkan semua utilitas kecil saya yang membantu saya melalui seluruh aplikasi. Di sana, saya punya definisi ini:
jadi pada dasarnya saya sedang menguji apakah pengguna dalam grup company_admin dan untuk kejelasan saya sudah memanggil fungsi ini is_company_admin .
Ketika saya ingin memeriksa apakah pengguna di company_admin saya hanya melakukan ini:
Sekarang, jika Anda ingin menguji yang sama dalam template Anda, Anda dapat menambahkan is_user_admin dalam konteks Anda, sesuatu seperti ini:
Sekarang Anda dapat mengevaluasi respons Anda di templat:
Solusi sederhana dan bersih, berdasarkan jawaban yang dapat ditemukan sebelumnya di utas ini, tetapi dilakukan secara berbeda. Semoga ini bisa membantu seseorang.
Diuji dalam Django 3.0.4.
sumber
data = Company.objects.all().filter(id=request.user.company.id)
, apa yang ditandakan Perusahaan? Apakah itu Model Anda?Dalam satu baris:
Ini mengevaluasi salah satu
True
atauFalse
.sumber
.exists()
untuk membiarkan db melakukan pekerjaan.Saya telah melakukannya dengan cara berikut. Tampaknya tidak efisien tetapi saya tidak memiliki cara lain dalam pikiran saya:
sumber
User.objects.filter(username='tom', groups__name='admin').exists()
Kueri itu akan memberi tahu Anda pengguna: "tom" apakah milik grup "admin" atau tidak
sumber
Saya melakukannya seperti ini. Untuk grup yang diberi nama
Editor
.templat
sumber