がある
from guardian.shortcuts import get_objects_for_user
しかし、どうですか
from guardian.shortcuts import get_users_for_object
ありがとう。
がある
from guardian.shortcuts import get_objects_for_user
しかし、どうですか
from guardian.shortcuts import get_users_for_object
ありがとう。
実際にはそのための近道があります
http://django-guardian.readthedocs.io/en/stable/api/guardian.shortcuts.html#get-users-with-perms
>>> from django.contrib.flatpages.models import FlatPage
>>> from django.contrib.auth.models import User
>>> from guardian.shortcuts import assign_perm, get_users_with_perms
>>>
>>> page = FlatPage.objects.create(title='Some page', path='/some/page/')
>>> joe = User.objects.create_user('joe', 'joe@example.com', 'joesecret')
>>> assign_perm('change_flatpage', joe, page)
>>>
>>> get_users_with_perms(page)
[<User: joe>]
>>>
>>> get_users_with_perms(page, attach_perms=True)
{<User: joe>: [u'change_flatpage']}
これが私の回避策です。これがモデル方式です。あなたはそれをミックスインにカプセル化することができます。
def get_users_with_perm(self, permission):
'''
Returns list of users(worn:not QuerySet) with specific permission for this object
:param permission: permission string
'''
anyperm = get_users_with_perms(self, attach_perms=True)
result = []
for user, perms in anyperm.iteritems():
if permission in perms: result.append(user)
return result
そのようなものはよさそうだ:https ://github.com/lukaszb/django-guardian/blob/master/guardian/shortcuts.py#L214
>>> from django.contrib.flatpages.models import FlatPage
>>> from django.contrib.auth.models import User
>>> from guardian.shortcuts import assign_perm, get_users_with_perms
>>>
>>> page = FlatPage.objects.create(title='Some page', path='/some/page/')
>>> joe = User.objects.create_user('joe', 'joe@example.com', 'joesecret')
>>> assign_perm('change_flatpage', joe, page)
>>>
>>> get_users_with_perms(page)
[<User: joe>]
>>>
>>> get_users_with_perms(page, attach_perms=True)
{<User: joe>: [u'change_flatpage']}
組み込みのget_users_with_perms()ショートカットを使用してこの問題を解決し、Pythonディクショナリ内包表記を使用して、指定されたオブジェクトに対して特定のアクセス許可を持つユーザーオブジェクトのリストを返しました。
from django.contrib.flatpages.models import FlatPage
from django.contrib.auth.models import User
from guardian.shortcuts import assign_perm, get_users_with_perms
ページオブジェクトを作成し、ユーザー'Joe'にchange_flatpage権限を付与します
page = FlatPage.objects.create(title='Some page', path='/some/page/')
joe = User.objects.create_user('joe', 'joe@example.com', 'joesecret')
assign_perm('change_flatpage', joe, page)
Guardianを使用して、特定のページオブジェクトに対する権限を持つユーザーを検索します
perms = get_users_with_perms(page, attach_perms=True)
Python辞書の理解を使用して、特定の権限を含むユーザーの新しいリストを返します
perm_name = "change_flatpage"
change_flatpage_user_list = [ k for k, v in perms.items() if perm_name in v ]