Django の管理サイトにカスタム グループを作成しました。
私のコードでは、ユーザーがこのグループに属しているかどうかを確認したいと考えています。それ、どうやったら出来るの?
Django の管理サイトにカスタム グループを作成しました。
私のコードでは、ユーザーがこのグループに属しているかどうかを確認したいと考えています。それ、どうやったら出来るの?
groups
グループには、属性 onを介して簡単にアクセスできます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
をuser.groups.all()
返します[<Group: Editor>]
。
または、より直接的に、次の方法でユーザーがグループに属しているかどうかを確認できます。
if django_user.groups.filter(name = groupname).exists():
...
は、実際の Django グループ オブジェクトでもgroupname
あることに注意してください。
サイトでユーザー インスタンスが必要ない場合 (私が行ったように)、次のようにして実行できます。
User.objects.filter(pk=userId, groups__name='Editor').exists()
これにより、データベースへのリクエストが 1 つだけ生成され、ブール値が返されます。
グループ内のユーザーのリストが必要な場合は、代わりにこれを実行できます。
from django.contrib.auth.models import Group
users_in_group = Group.objects.get(name="group name").user_set.all()
そしてチェック
if user in users_in_group:
# do something
ユーザーがグループに属しているかどうかを確認します。
1行だけ必要です:
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.groups.filter(name='companyGroup').exists())
def you_view():
return HttpResponse("Since you're logged in, you can see this text!")
これを使って:
{% for group in request.user.groups.all %}
{% if group.name == 'GroupName' %}
{% endif %}
{% endfor %}
念のため、ユーザーのグループが事前定義されたグループ リストに属していることを確認したい場合:
def is_allowed(user):
allowed_group = set(['admin', 'lead', 'manager'])
usr = User.objects.get(username=user)
groups = [ x.name for x in usr.groups.all()]
if allowed_group.intersection(set(groups)):
return True
return False
一行で:
'Groupname' in user.groups.values_list('name', flat=True)
True
これは または のいずれかに評価されますFalse
。
私はこのようにしました。という名前のグループの場合Editor
。
# views.py
def index(request):
current_user_groups = request.user.groups.values_list("name", flat=True)
context = {
"is_editor": "Editor" in current_user_groups,
}
return render(request, "index.html", context)
テンプレート
# index.html
{% if is_editor %}
<h1>Editor tools</h1>
{% endif %}