174

Django の管理サイトにカスタム グループを作成しました。

私のコードでは、ユーザーがこのグループに属しているかどうかを確認したいと考えています。それ、どうやったら出来るの?

4

13 に答える 13

138

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あることに注意してください。

于 2011-01-25T01:11:53.873 に答える
16

サイトでユーザー インスタンスが必要ない場合 (私が行ったように)、次のようにして実行できます。

User.objects.filter(pk=userId, groups__name='Editor').exists()

これにより、データベースへのリクエストが 1 つだけ生成され、ブール値が返されます。

于 2015-08-21T08:58:26.833 に答える
15

グループ内のユーザーのリストが必要な場合は、代わりにこれを実行できます。

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

ユーザーがグループに属しているかどうかを確認します。

于 2013-02-22T17:30:08.133 に答える
10

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!")
于 2015-01-26T18:47:48.230 に答える
2

これを使って:

{% for group in request.user.groups.all %}
    {% if group.name == 'GroupName' %}
    {% endif %}
{% endfor %}
于 2021-03-20T20:51:23.693 に答える
1

念のため、ユーザーのグループが事前定義されたグループ リストに属していることを確認したい場合:

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
于 2013-10-13T12:33:58.870 に答える
0

一行で:

'Groupname' in user.groups.values_list('name', flat=True)

Trueこれは または のいずれかに評価されますFalse

于 2014-11-05T12:18:19.107 に答える
0

私はこのようにしました。という名前のグループの場合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 %}
于 2019-12-16T04:52:08.957 に答える